PHP学习记录之常用的魔术常量详解


Posted in PHP onDecember 12, 2019

本文实例讲述了PHP学习记录之常用的魔术常量。分享给大家供大家参考,具体如下:

PHP 向它运行的任何脚本提供了大量的预定义常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变,我们接下来具体看下。

首先是__LINE__,它表示文件中的当前行号,实例如下:

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

第二个就是__FILE__,它表示文件的完整路径和文件名,如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。来看下实例:

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

第三个就是__DIR__了,它表示文件所在的目录,如果用在被包括文件中,则返回被包括的文件所在的目录。它还等价于 dirname(__FILE__),除非是根目录,否则目录中名不包括末尾的斜杠。实例如下:

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

再来就是__FUNCTION__了,它表示当前所在的函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写),所以在 PHP 4 中该值总是小写字母的。实例如下:

<?php
function test() {
  echo '函数名为:' . __FUNCTION__ ;
}
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();
?>

第六个就是__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();
?>

在遇到需要使用多个 trait的情况时,我们可以通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。实例如下:

<?php
trait Hello {
  public function sayHello() {
    echo 'Hello ';
  }
}
trait World {
  public function sayWorld() {
    echo 'World';
  }
}
class MyHelloWorld {
  use Hello, World;
  public function sayExclamationMark() {
    echo '!';
  }
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>

再来就是__METHOD__了,它表示当前所使用的类的方法名(PHP 5.0.0 新加),返回该方法被定义时的名字(区分大小写)。实例如下:

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

最后需要记录的就是__NAMESPACE__,它表示当前命名空间的名称(区分大小写),这个常量是在编译时定义的(PHP 5.3.0 新增)。实例如下:

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

好啦,本次记录就到这里了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP音乐采集(部分代码)
Feb 14 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
PHP使用QR Code生成二维码实例
Jul 07 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 #PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 #PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 #PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 #PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 #PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 #PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 #PHP
You might like
利用PHP动态生成VRML网页
2006/10/09 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
python数据结构树和二叉树简介
2014/04/29 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python 自动批量打开网页的示例
2019/02/21 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
仓库组长岗位职责
2014/01/29 职场文书
四年级数学教学反思
2014/02/02 职场文书
现场施工员岗位职责
2014/03/10 职场文书
高一学生期末评语
2014/04/25 职场文书
2015年人事科工作总结
2015/04/28 职场文书
医院志愿者活动总结
2015/05/06 职场文书
小学思品教学反思
2016/02/20 职场文书