浅谈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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
在php MYSQL中插入当前时间
Apr 06 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
一个简单且很好用的php分页类
Oct 26 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
PHP导出Excel实例讲解
Jan 24 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
点击文章内容处弹出页面代码
2009/10/01 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
python动态参数用法实例分析
2015/05/25 Python
python常用知识梳理(必看篇)
2017/03/23 Python
python中Apriori算法实现讲解
2017/12/10 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
对Python3 序列解包详解
2019/02/16 Python
python占位符输入方式实例
2019/05/27 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
护士长竞聘书
2014/03/31 职场文书
社区文化建设方案
2014/05/02 职场文书
助残日活动总结
2014/08/27 职场文书
个人存款证明书
2014/10/18 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书