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通过COM类调用组件的实现代码
Jan 11 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP最常用的正则表达式
Feb 13 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 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中spl_autoload_register函数的用法总结
2013/11/07 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
优化javascript的执行速度
2010/01/23 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
浅谈五大Python Web框架
2017/03/20 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
六月份红领巾广播稿
2014/02/03 职场文书
淘宝好评语大全
2014/05/05 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
JavaScript 实现页面滚动动画
2021/04/24 Javascript
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Python加密技术之RSA加密解密的实现
2022/04/08 Python