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 正则表达式小结
Aug 31 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
php 地区分类排序算法
Jul 01 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
php微信开发之上传临时素材
2016/06/24 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
javascript实现数独解法
2015/03/14 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
Vue 自定义指令功能完整实例
2019/09/17 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
Vue实现圆环进度条的示例
2021/02/06 Vue.js
Python装饰器用法实例分析
2019/01/14 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
天网面试题
2013/04/07 面试题
服务员岗位职责
2014/01/29 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
离婚协议书的范本
2015/01/27 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery