详解PHP中的8个魔术常量


Posted in PHP onJuly 06, 2020

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

__LINE__

文件中的当前行号。

<?php
echo '这是第 " ' . __LINE__ . ' " 行';
?>

以上实例输出结果为:

这是第 “ 2 ” 行

__FILE__

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

实例:

<?php
echo '该文件位于 " ' . __FILE__ . ' " ';
?>

以上实例输出结果为:

该文件位于 “ E:\wamp\www\test\index.php ”

__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

<?php
echo '该文件位于 " ' . __DIR__ . ' " ';
?>

以上实例输出结果为:

该文件位于 “ E:\wamp\www\test ”

__FUNCTION__

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

<?php
function test() {
 echo '函数名为:' . __FUNCTION__ ;
}
test();
?>

以上实例输出结果为:

函数名为:test

__CLASS__

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

<?php
class test {
 function _print() {
  echo '类名为:' . __CLASS__ . "<br>";
  echo '函数名为:' . __FUNCTION__ ;
 }
}
$t = new test();
$t->_print();
?>

以上实例输出结果为:

类名为:test
函数名为:_print

__TRAIT__

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

<?php
class Base {
 public function sayHello() {
  echo 'Hello ';
 }
}
 
trait SayWorld {
 public function sayHello() {
  parent::sayHello();
  echo 'World!';
 }
}
 
class MyHelloWorld extends Base {
 use SayWorld;
}
 
$o = new MyHelloWorld();
$o->sayHello();
?>

以上例程会输出:

Hello World!

__METHOD__

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

实例:

<?php
function test() {
 echo '函数名为:' . __METHOD__ ;
}
test();
?>

以上实例输出结果为:

函数名为:test

__NAMESPACE__

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

实例:

<?php
namespace MyProject;
 
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
?>

以上实例输出结果为:

命名空间为:"MyProject"

以上就是详解PHP中的8个魔术常量的详细内容,更多关于PHP 魔术常量的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
PHP similar_text 字符串的相似性比较函数
May 26 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
php实现源代码加密的方法
Jul 11 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
php关闭warning问题的解决方法
May 17 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 #PHP
PHP实现递归的三种方法
Jul 04 #PHP
laravel开发环境homestead搭建过程详解
Jul 03 #PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 #PHP
PHP 超级全局变量相关总结
Jun 30 #PHP
详细分析PHP 命名空间(namespace)
Jun 30 #PHP
浅析PHP echo 和 print 语句
Jun 30 #PHP
You might like
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
php生成QRcode实例
2014/09/22 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
浅析用prototype定义自己的方法
2013/11/14 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
高一自我鉴定
2013/12/17 职场文书
个人自我鉴定总结
2014/03/25 职场文书
付款委托书范本
2014/04/04 职场文书
学生期末评语大全
2014/04/30 职场文书
保险公司演讲稿
2014/09/02 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
质量整改报告范文
2014/11/08 职场文书
平安建设汇报材料
2014/12/29 职场文书
研究生个人学年总结
2015/02/14 职场文书
金陵十三钗观后感
2015/06/04 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby