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 strtr() 函数使用说明
Nov 21 PHP
PHP 翻页 实例代码
Aug 07 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
深入理解PHP中的global
Aug 19 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
PHP异常处理浅析
May 12 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
php 查找数组元素提高效率的方法详解
May 05 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 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时区转换转换函数
2014/01/07 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP实现事件机制的方法
2015/07/10 PHP
简述php环境搭建与配置
2016/12/05 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Python实现最常见加密方式详解
2019/07/13 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
数字天堂软件测试面试题
2012/12/23 面试题
一年级班主任感言
2014/03/08 职场文书
道路建设实施方案
2014/03/18 职场文书
2014年实验室工作总结
2014/12/03 职场文书
实习单位意见
2015/06/04 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫