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 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
PHP7匿名类的用法示例
Apr 05 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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 中include()与require()的对比
2006/10/09 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
python清理子进程机制剖析
2017/11/23 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
大学生社团活动总结
2014/04/26 职场文书
应届毕业生自荐信
2014/05/28 职场文书
新文化运动的基本口号
2014/06/21 职场文书
党委班子剖析材料
2014/08/21 职场文书
师范生见习总结范文
2015/06/23 职场文书
预备党员入党感言
2015/08/01 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
Python+DeOldify实现老照片上色功能
2022/06/21 Python