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获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
浅谈php冒泡排序
Dec 30 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
php实现三级级联下拉框
Apr 17 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
自制PHP框架之模型与数据库
May 07 PHP
php实现数字补零的方法总结
Sep 12 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
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
php自定义错误处理用法实例
2015/03/20 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
Javascript MD4
2006/12/20 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
Python生成随机密码
2015/03/10 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Python探索之修改Python搜索路径
2017/10/25 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
大学生社会实践方案
2014/05/11 职场文书
中职招生先进个人材料
2014/08/31 职场文书
新党章心得体会
2014/09/04 职场文书
大一新生期末自我评价
2014/09/12 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
党校党性分析材料
2014/12/19 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
社区党建工作总结2015
2015/05/13 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python