所有魔术变量表示的值均区分大小写
__CLASS__
表示代码所在类的名字
// 文件 define.php namespace Base { abstract class Fruit { public function __construct() { // 输出 Base\Fruit echo __CLASS__; echo "\n"; // 输出 Sub\Apple echo get_class($this); echo "\n"; } public function hello() { // 输出 Base\Fruit echo __CLASS__; echo "\n"; } } } namespace Sub { class Apple extends \Base\Fruit { public function say() { // 输出 Sub\Apple echo __CLASS__; echo "\n"; } } } // 文件 test.php require __DIR__ . '/define.php'; $Apple = new Sub\Apple(); $Apple->hello(); $Apple->say();
__DIR__
表示代码所在文件所在的完整目录名,等价于 dirname(__FILE__),不包括末尾的斜杠 /
// 文件 test.php // 输出 test.php 所在目录 /opt/wwwroot/test echo __DIR__; echo "\n";
__FUNCTION__
表示代码所在函数的名称
function foo() { // 输出函数名 foo echo __FUNCTION__; echo "\n"; } foo();
__FILE__
表示代码所在文件的完整路径名
// 文件 test.php // 输出 test.php 所在目录 /opt/wwwroot/test/test.php echo __FILE__;
__LINE__
表示代码所在文件中的行号
// 文件 test.php // 输出代码行号 echo __LINE__;
__METHOD__
表示代码所在函数的名称
// 文件 define.php namespace Base; function foo() { // 输出函数名 Base\foo echo __FUNCTION__; echo "\n"; // 输出函数名 Base\foo echo __METHOD__; echo "\n"; } class Foo { public function bar() { // 输出函数名 bar echo __FUNCTION__; echo "\n"; // 输出方法名 Base\Foo::bar echo __METHOD__; echo "\n"; } public static function staticBar() { // 输出函数名 staticBar echo __FUNCTION__; echo "\n"; // 输出方法名 Base\Foo::staticBar echo __METHOD__; echo "\n"; } } // 文件 test.php require __DIR__ . '/define.php'; Base\foo(); $foo = new Base\Foo(); $foo->bar(); $foo->staticBar();
__TRAIT__
表示代码所在 trait 的名称,包含完整限定的 namespace
// 文件 define.php namespace Base { trait Wheel { public function roll() { // 输出 Base\Wheel echo __TRAIT__; echo "\n"; // 输出 Sub\Car echo __CLASS__; echo "\n"; } } } namespace Sub { class Car { use \Base\Wheel; public function start() { $this->roll(); // 输出空字符串 echo __TRAIT__; echo "\n"; // 输出 Sub\Car echo __CLASS__; echo "\n"; } } } // 文件 test.php require __DIR__ . '/define.php'; $car = new Sub\Car(); $car->start();
__NAMESPACE__
表示当前代码所在命名空间
namespace Vendor\Util; // 输出命名空间 Vendor\Util echo __NAMESPACE__; echo "\n"; function foo() { // 输出命名空间 Vendor\Util echo __NAMESPACE__; echo "\n"; } foo();