魔术常量

有九个魔术常量,它们的值会根据它们的使用位置而改变。例如,**__LINE__** 的值取决于它在脚本中使用的行号。与普通的常量不同,所有这些“魔术”常量都在编译时解析,而普通的常量在运行时解析。这些特殊常量不区分大小写,如下所示:

PHP 的魔术常量
名称 描述
__LINE__ 文件的当前行号。
__FILE__ 文件的完整路径和文件名,包括解析后的符号链接。如果在 include 中使用,则返回包含文件的文件名。
__DIR__ 文件的目录。如果在 include 中使用,则返回包含文件的文件目录。这等效于 dirname(__FILE__)。此目录名没有尾部斜杠,除非它是根目录。
__FUNCTION__ 函数名,或匿名函数的 {closure}
__CLASS__ 类名。类名包含它所声明的命名空间(例如 Foo\Bar)。当在 trait 方法中使用时,__CLASS__ 是使用 trait 的类的名称。
__TRAIT__ trait 名称。trait 名称包含它所声明的命名空间(例如 Foo\Bar)。
__METHOD__ 类方法名称。
__NAMESPACE__ 当前命名空间的名称。
ClassName::class 完全限定的类名。

添加备注

用户贡献的备注 3 个备注

Rich
1 年前
<?php

namespace My\App {
class
Api {
public static
fetch() {
print
__FUNCTION__ . "\n"; // 输出 fetch
print __METHOD__ . "\n"; // 输出 My\App\Api::fetch
}
}

Api::fetch();
}

namespace {
My\App\Api::fetch();
}
?>

__METHOD__ 输出完全限定的方法名;__FUNCTION__ 在方法中使用时,仅输出方法名。
chris at ocproducts dot com
1 年前
请注意,__CLASS__ 和 __METHOD__ 都引用了编写代码的类,而不是对象的类。例如,如果你有一个继承自类 A 的类 B 的对象,那么在类 A 中使用 __CLASS__ 将返回“A”。
theking2 at king dot ma
2 年前
如果 PHP 在 Web 服务器请求内运行,__DIR__ 常量和 $_SERVER['DOCUMENT_ROOT'] 之间存在重要区别。

在子文件夹中包含的 PHP 脚本中,__DIR__ 将包含完整的服务器路径,而 $_SERVER['DOCUMENT_ROOT'] 将包含到应用程序 _根_ 的服务器路径。这在定义自动加载器时非常有用,例如在子文件夹中的 include 文件中,而类位于应用程序根目录下的另一个文件夹中。
To Top