浅谈PHP中的那些魔术常量


Posted in PHP onDecember 02, 2020

之前我们已经了解了一些常用的魔术方法,除了魔术方法外,PHP还提供一些魔术常量,相信大家在日常的工作中也都使用过,这里给大家做一个总结。

其实PHP还提供了很多常量但都依赖于各类扩展库,而有几个常量是通用并且是跟随它们所在代码的位置来提供一些与位置有关的信息,这些就是魔术常量。魔术常量是不分大小写的,\_\_LINE\_\_和\_\_line\_\_是一样的,但对于工程化的开发来说,常量还是尽量以大写为主。

\_\_LINE\_\_

文件中的当前行号。

echo __LINE__ . PHP_EOL; // 3

function testLine()
{
  echo __LINE__ . PHP_EOL; // 7
}

class TestLineClass
{
  function testLine()
  {
    echo __LINE__ . PHP_EOL; // 14
  }
}

testLine();
$test = new TestLineClass();
$test->testLine();

\_\_FILE\_\_

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,\_\_FILE\_\_ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

echo __FILE__ . PHP_EOL; // D:\phpproject\php\newblog\php-magic-constant.php

\_\_DIR\_\_

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(\_\_FILE\_\_)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =

echo __DIR__ . PHP_EOL; // D:\phpproject\php\newblog

\_\_FUNCTION\_\_

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

echo __FUNCTION__ . PHP_EOL; // 啥都没输出
function testFunction()
{
  echo __FUNCTION__ . PHP_EOL; // testFunction
}

class TestFunctionClass
{
  function testFunction1()
  {
    echo __FUNCTION__ . PHP_EOL; // testFunction1
  }
}

testFunction();
$test = new TestFunctionClass();
$test->testFunction1();

\_\_CLASS\_\_

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 \_\_CLASS\_\_ 对 trait 也起作用。当用在 trait 方法中时,\_\_CLASS\_\_ 是调用 trait 方法的类的名字。

echo __CLASS__ . PHP_EOL; // 什么也没有
function testClass()
{
  echo __CLASS__ . PHP_EOL; // 什么也没有
}

trait TestClassTrait
{
  function testClass2()
  {
    echo __CLASS__ . PHP_EOL; // TestClassClass
  }
}

class TestClassClass
{
  use TestClassTrait;

  function testClass1()
  {
    echo __CLASS__ . PHP_EOL; // TestClassClass
  }
}

testClass();
$test = new TestClassClass();
$test->testClass1();
$test->testClass2();

\_\_TRAIT\_\_

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

echo __TRAIT__ . PHP_EOL; // 什么也没有
function testTrait()
{
  echo __TRAIT__ . PHP_EOL; // 什么也没有
}

trait TestTrait
{
  function testTrait2()
  {
    echo __TRAIT__ . PHP_EOL; // TestTrait
  }
}

class TestTraitClass
{
  use TestTrait;

  function testTrait1()
  {
    echo __TRAIT__ . PHP_EOL; // 什么也没有
  }
}

testTrait();
$test = new TestTraitClass();
$test->testTrait1();
$test->testTrait2();

\_\_METHOD\_\_

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

echo __METHOD__ . PHP_EOL; // 什么也没有
function testMethod()
{
  echo __METHOD__ . PHP_EOL; // testMethod
}

class TestMethodClass
{
  function testMethod1()
  {
    echo __METHOD__ . PHP_EOL; // TestMethodClass::testMethod1
  }
}

testMethod();
$test = new TestMethodClass();
$test->testMethod1();

\_\_NAMESPACE\_\_

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

echo __NAMESPACE__ . PHP_EOL; // test\magic\constant
class TestNameSpaceClass
{
  function testNamespace()
  {
    echo __NAMESPACE__ . PHP_EOL; // test\magic\constant
  }
}

$test = new TestNameSpaceClass();
$test->testNamespace();

完整代码:https://github.com/zhangyue0503/php/blob/master/newblog/php-magic-constant.php

到此这篇关于浅谈PHP中的那些魔术常量的文章就介绍到这了,更多相关PHP 魔术常量内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
用php+mysql一个名片库程序
Oct 09 PHP
PHP用户指南-cookies部分
Oct 09 PHP
php学习 字符串课件
Jun 15 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 #PHP
php如何实现数据库的备份和恢复
Nov 30 #PHP
php实现简单四则运算器
Nov 29 #PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 #PHP
php实现JWT验证的实例教程
Nov 26 #PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 #PHP
PHP扩展安装方法步骤解析
Nov 24 #PHP
You might like
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
vue.js中npm安装教程图解
2018/04/10 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
python删除过期文件的方法
2015/05/29 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
python多进程共享变量
2016/04/06 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
详解Python:面向对象编程
2019/04/10 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
实现向右循环移位
2014/07/31 面试题
南京某软件公司的.net面试题
2015/11/30 面试题
软件测试面试题
2015/10/21 面试题
五年级语文教学反思
2014/01/30 职场文书
入股合作协议书
2014/10/12 职场文书
2014年教育工作总结
2014/11/26 职场文书
收入证明怎么写
2015/06/12 职场文书
python基础之错误和异常处理
2021/10/24 Python
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js