PHP 魔术变量

所有魔术变量表示的值均区分大小写

__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();

作者: 袖之欢

科技改变生活,编程改变世界。

发表评论

电子邮件地址不会被公开。 必填项已用*标注