PHP 预定义变量、魔术常量和魔术方法功能与用法小结
本文总结了PHP预定义变量、魔术常量和魔术方法。分享给大家供大家参考,具体如下:
PHP预定义了一些变量、常量、方法,使用起来很方便,例如直接使用 __DIR__获取当前文件所在的目录。
下面分别详细介绍一下PHP的预定义变量、魔术常量和魔术方法
预定义变量
超全局变量:
超全局变量是在全部作用域中始终可用的内置变量,意味这你可以在PHP脚本的任意位置直接访问。在函数或方法中无需执行 global$variable; 就可以访问它们。
超全局变量是从PHP4.1.0开始才有的功能。
PHP的超级全局变量有:
$GLOBALS,引用全局作用域中可用的全部变量
$_SERVER,服务器和执行环境信息
$_GET,HTTPGET变量
$_POST,HTTPPOST变量
$_FILES,HTTP文件上传变量
$_COOKIE,HTTPCookies
$_SESSION,Session变量
$_REQUEST,HTTPRequest变量
$_ENV,环境变量
其他:
$php_errormsg,前一个错误信息
$HTTP_RAW_POST_DATA,原生POST数据,一般会使用 php://input 代替
$http_response_header,HTTP响应头
$argc,传递给脚本的参数数目
$argv,传递给脚本的参数数组
魔术常量
PHP有八个魔术常量,它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量(魔术常量)不区分大小写,如下:
__LINE__,文件中的当前行号
__FILE__,文件的完整路径和文件名,如果用在被包含的文件中,则返回被包含的文件名
__DIR__,文件所在的目录,如果用在被包括文件中,则返回被包括的文件所在的目录。等价与dirname(__FILE__)
__FUNCTION__,函数的名称
__CLASS__,类的名称
__TRAIT__,trait的名字
__METHOD__,类的方法名
__NAMESPACE__,当前命名空间的名称
魔术方法
MagicmethodsPHP的魔术方法,在命名自定义的类方法时不能使用这些方法名,因为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()方法会被自动调用,本特性只在PHP5.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程序设计有所帮助。