所有魔术变量表示的值均区分大小写
__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();