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 相关文章推荐
一个用php3编写的简单计数器
Oct 09 PHP
Apache服务器无法使用的解决方法
May 08 PHP
解析centos中Apache、php、mysql 默认安装路径
Jun 25 PHP
ini_set的用法介绍
Jan 07 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 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
用PHP4访问Oracle815
2006/10/09 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
python中pygame模块用法实例
2014/10/09 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
用python绘制樱花树
2020/10/09 Python
python 实现有道翻译功能
2021/02/26 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
物流专业大学生求职信范文
2013/10/28 职场文书
出纳岗位职责范本
2013/12/01 职场文书
招商业务员岗位职责
2013/12/16 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书