浅谈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 相关文章推荐
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
php获取服务器信息的实现代码
Feb 04 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
php 数组元素快速去重
May 05 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
解决php extension 加载顺序问题
Aug 16 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Python写的一个简单监控系统
2015/06/19 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Python中表示字符串的三种方法
2017/09/06 Python
Python中一行和多行import模块问题
2018/04/01 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
一文读懂Python 枚举
2020/08/25 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Python中Selenium模块的使用详解
2020/10/09 Python
元旦联欢会感言
2014/03/04 职场文书
社区活动总结报告
2014/05/05 职场文书
还款承诺书范文
2014/05/20 职场文书
旷课检讨书500字
2014/10/14 职场文书
小学教师自我评价
2015/03/04 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
Python之基础函数案例详解
2021/08/30 Python