PHP 预定义变量、魔术常量和魔术方法功能与用法小结

 更新时间:2020年04月22日 10:14:40   作者:Ryan_zheng  
这篇文章主要介绍了PHP 预定义变量、魔术常量和魔术方法,总结分析了PHP 预定义变量、魔术常量和魔术方法基本概念、原理、功能、用法及操作注意事项,需要的朋友可以参考下

本文总结了PHP 预定义变量、魔术常量和魔术方法。分享给大家供大家参考,具体如下:

PHP 预定义了一些变量、常量、方法,使用起来很方便,例如直接使用 __DIR__ 获取当前文件所在的目录。

下面分别详细介绍一下 PHP 的预定义变量、魔术常量和魔术方法

预定义变量

超全局变量:

超全局变量是在全部作用域中始终可用的内置变量,意味这你可以在 PHP 脚本的任意位置直接访问。在函数或方法中无需执行 global $variable; 就可以访问它们。

超全局变量是从 PHP 4.1.0 开始才有的功能。

PHP 的超级全局变量有:

$GLOBALS,引用全局作用域中可用的全部变量

$_SERVER,服务器和执行环境信息

$_GET,HTTP GET 变量

$_POST,HTTP POST 变量

$_FILES,HTTP 文件上传变量

$_COOKIE,HTTP Cookies

$_SESSION,Session 变量

$_REQUEST,HTTP Request 变量

$_ENV,环境变量

其他:

$php_errormsg,前一个错误信息

$HTTP_RAW_POST_DATA,原生 POST 数据,一般会使用 php://input 代替 $HTTP_RAW_POST_DATA

$http_response_header,HTTP 响应头

$argc,传递给脚本的参数数目

$argv,传递给脚本的参数数组

魔术常量

PHP 有八个魔术常量,它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量(魔术常量)不区分大小写,如下:

__LINE__,文件中的当前行号

__FILE__,文件的完整路径和文件名,如果用在被包含的文件中,则返回被包含的文件名

__DIR__,文件所在的目录,如果用在被包括文件中,则返回被包括的文件所在的目录。等价与 dirname(__FILE__)

__FUNCTION__,函数的名称

__CLASS__,类的名称

__TRAIT__,trait 的名字

__METHOD__,类的方法名

__NAMESPACE__,当前命名空间的名称

魔术方法

Magic methods PHP 的魔术方法,在命名自定义的类方法时不能使用这些方法名,因为 PHP 已经规定好了这些方法是有特定的功能,例如 __construct() 是构造方法。

PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了魔术方法,建议不要以 __ 为前缀。

__construct(),构造函数

__destruct(),析构函数

__call(),在对象中调用一个不可访问的方法时,__call() 会被调用

__callStatic(),在对象中调用一个不可访问的静态方法时,__call() 会被调用

__get(),当读取不可访问的属性值时,__set() 会被调用

__set(),当给不可访问的属性赋值时,__set() 会被调用

__isset(),当对不可访问属性调用 isset() 或 empty() 是,__isset() 会被调用

__unset(),当对不可访问属性调用 unset() 时,__unset() 会被调用

__sleep(),serialize() 函数会检查类中是否存在魔术方法 __sleep(),如果存在,会先调用 __sleep(),然后才执行序列化操作。这样就允许对象在被序列化之前做任何清除操作。

__wakeup(),当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

__toString(),当一个对象被当作字符串输出时,会调用 __toString() 输出的内容,例如 echo $obj;

__invoke(),当以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用,本特性只在 PHP 5.3.0 及以上版本有效。

__set_state(),当调用 var_export() 导出对象时,此方法会被调用

__clone(),对象复制,当使用 clone 关键字复制对象时,会调用 __clone(),__clone() 不能被直接调用,使用 clone 复制的对象为浅复制,所以引用属性仍然会是一个指向原来的变量的引用。

__debugInfo(),当调用 var_dump() 导出对象时,此方法会被调用

__autoload($class_name),加载未定义的类 

官方文档:

https://www.php.net/manual/zh/reserved.variables.php

https://www.php.net/manual/zh/language.constants.predefined.php

https://www.php.net/manual/zh/language.oop5.magic.php

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHP实现对数字分隔加千分号的方法

    PHP实现对数字分隔加千分号的方法

    今天小编就为大家分享一篇关于PHP实现对数字分隔加千分号的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • PHP下用rmdir实现删除目录的三种方法小结

    PHP下用rmdir实现删除目录的三种方法小结

    PHP本身有一个rmdir()函数可以用来删除目录,不过要求必须是空目录,本文列举了三种方法。1、递规法;2、系统调用法;3、循环法 。
    2008-04-04
  • php防止SQL注入详解及防范

    php防止SQL注入详解及防范

    SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞
    2013-11-11
  • 修改Laravel5.3中的路由文件与路径

    修改Laravel5.3中的路由文件与路径

    本文先是回顾了Laravel5.2中路由的修改,然后给大家用实例代码介绍了如何修改Laravel5.3中的路由,有需要的小伙伴们可以参考学习。
    2016-08-08
  • PHP实现的一致性哈希算法完整实例

    PHP实现的一致性哈希算法完整实例

    这篇文章主要介绍了PHP实现的一致性哈希算法,以完整实例形式分析了PHP哈希算法的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 单台服务器的PHP进程之间实现共享内存的方法

    单台服务器的PHP进程之间实现共享内存的方法

    这篇文章主要介绍了单台服务器的PHP进程之间实现共享内存的方法,需要的朋友可以参考下
    2014-06-06
  • 使用PHP强制下载PDF文件示例

    使用PHP强制下载PDF文件示例

    当需要下载一个PDF文件时,如果不经处理会直接在浏览器里打开PDF文件,然后再需要通过另存为才能保存下载文件,下面通过PHP来实现直接下载PDF文件
    2014-01-01
  • 十个PHP高级应用技巧果断收藏

    十个PHP高级应用技巧果断收藏

    PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用。本文介绍了十个PHP高级应用技巧,一起来看。
    2015-09-09
  • PHP实现将多个文件压缩成zip格式并下载到本地的方法示例

    PHP实现将多个文件压缩成zip格式并下载到本地的方法示例

    这篇文章主要介绍了PHP实现将多个文件压缩成zip格式并下载到本地的方法,涉及php针对文件与目录的读写、判断与zip压缩相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • PHP7安装Redis扩展教程【Linux与Windows平台】

    PHP7安装Redis扩展教程【Linux与Windows平台】

    这篇文章主要介绍了PHP7安装Redis扩展的方法,简单分析了Linux与Windows平台Redis扩展的安装方法,并提供了一个实例进一步分析了php操作Redis的相关技巧,需要的朋友可以参考下
    2016-09-09

最新评论