浅谈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 相关文章推荐
推荐25款php中非常有用的类库
Sep 29 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP中的表达式简述
May 29 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
php出租房数据管理及搜索页面
May 23 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 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
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
JavaScript的eval JSON object问题
2009/11/15 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
微信小程序-详解数据缓存
2016/11/24 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Python base64编码解码实例
2015/06/21 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
估算杭州有多少软件工程师
2015/08/11 面试题
医学生自荐信
2013/12/03 职场文书
单位办理社保介绍信
2014/01/10 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js