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 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
yii框架数据库关联查询操作示例
Oct 14 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 curl 并发最佳实践代码分享
2012/09/05 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
理解JavaScript中的事件
2006/09/23 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
Python 专题一 函数的基础知识
2017/03/16 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python pip配置国内源的方法
2020/02/14 Python
python logging 日志的级别调整方式
2020/02/21 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
python 读取二进制 显示图片案例
2020/04/24 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
Python连接mysql方法及常用参数
2020/09/01 Python
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL