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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
生成sessionid和随机密码的例子
Oct 09 PHP
基于php iconv函数的使用详解
Jun 09 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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跨域cookie共享使用方法
2014/02/20 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
深入理解Python异常处理的哲学
2019/02/01 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
浅谈python标准库--functools.partial
2019/03/13 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
python二维图制作的实例代码
2020/12/03 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
《果园机器人》教学反思
2014/04/13 职场文书
高中同学会活动方案
2014/08/14 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书