#### 1. 什么魔术常量 --- 预定义常量:预定义常量就是PHP内置的常量,预先定义好的 PHP有很多预定义常量,比如:PHP_VERSION(版本号)、PHP_OS(操作系统)。 这些普通的预定义常量在程序中的值是固定的,不会因为在不同的位置而改变自身的值。 在PHP有八个特殊的预定义常量,它们的值会随着它们在代码中的位置改变而改变,我们称之为魔术常量。 #### 2. PHP的8个魔术常量 --- | 序号 | 魔术常量 | 示例 | 描述 | | ------------ | ------------ | ------------ | ------------ | | 1 | \_\_LINE\_\_ | 5 | 返回魔术常量输出时所在的行号 | | 2 | \_\_FILE\_\_ | E:\www\1.php | 返回文件路径(绝对路径) | | 3 | \_\_DIR\_\_ | E:\www | 返回文件所在的目录,当前文件位置:E:\www\1.php | | 4 | \_\_FUNCTION\_\_ | taskList | 返回函数名称,区分大小写,不在函数中时返回空字符串 | | 5 | \_\_CLASS\_\_ | app\controller\User | 返回当前所在类名,包含命名空间,区分大小写 | | 6 | \_\_METHOD\_\_ | app\controller\User:test | 返回当前所在方法名,包含命名空间,区分大小写 | | 7 | \_\_NAMESPACE\_\_ | app\controller | 返回当前命名空间,区分大小写 | | 8 | \_\_TRAIT\_\_ | app\controller\Person | 返回当前所在Trait名,包含命名空间,区分大小写 | #### 3. 使用示例 --- 前四个魔术常量 ```php <?php echo __LINE__;//3 echo __FILE__;//E:\www\1.php echo __DIR__;//E:\www echo userList();//userList function userList() { echo __FUNCTION__; } ``` 后四个魔术常量 ```php <?php namespace app\controller; trait Person { public static function demo() { echo __TRAIT__;//app\controller\Person } } class User { use Person; public static function test() { echo __CLASS__;//app\controller\User echo __METHOD__;//app\controller\User::test } } User::test(); User::demo(); echo __NAMESPACE__;//app\controller ```