浅谈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 保留小数点
Apr 21 PHP
php 正则匹配函数体
Aug 25 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 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
层叠菜单的动态生成
2006/10/09 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
详解Vue之计算属性
2020/06/20 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
简单介绍Python中的len()函数的使用
2015/04/07 Python
python 读入多行数据的实例
2018/04/19 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
python将音频进行变速的操作方法
2020/04/08 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
服装店营销方案
2014/03/10 职场文书
护士辞职信怎么写
2015/02/27 职场文书
管理失职检讨书
2015/05/05 职场文书
中学政教处工作总结
2015/08/13 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏