浅谈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 冒泡排序算法的实现代码
Aug 08 PHP
php SQL Injection with MySQL
Feb 27 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
Uncaught exception com_exception with message Failed to create COM object
Jan 11 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
浅谈php的优缺点
Jul 14 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 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
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
微信小程序之数据绑定原理解析
2019/08/14 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
详解Python中break语句的用法
2015/05/14 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
教师实习自我鉴定
2013/12/13 职场文书
集团薪酬管理制度
2014/01/13 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
美术教师个人工作总结
2015/02/06 职场文书
超市收银员岗位职责
2015/04/07 职场文书
统招统分证明
2015/06/23 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Python 绘制多因子柱状图
2022/05/11 Python