php魔术方法与魔术变量、内置方法与内置变量的深入分析
发布时间:2020-12-13 06:19:17 所属栏目:PHP教程 来源:网络整理
导读:DIRECTORY_SEPARATOR是一个返回跟操作系统相关的路径分隔符的php内置命令,在windows上返回/,而在linux或者类unix上反悔/,就是这么个区别,通常在定义包含文件路径或者上传保存目录的时候会用到。 PHP 把所有以 __ (两个下划线)开头的类方法当成魔术方法
DIRECTORY_SEPARATOR是一个返回跟操作系统相关的路径分隔符的php内置命令,在windows上返回/,而在linux或者类unix上反悔/,就是这么个区别,通常在定义包含文件路径或者上传保存目录的时候会用到。 PHP 把所有以 __ (两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __ 为前缀。 1 、 __construct()当实例化一个对象的时候,这个对象的构造方法将首先被调用;我们知道 php5 对象模型和类名相同的函数是类的构造函数,那么如果同时定义构造函数和 __construc() 方法的话, php5 会默认调用 __contruct() 而不会调用同类名函数,所以 __contruct() 作为类的默认构造函数; 2 、 __destruct()析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。3 、 __get(string $name)当试图读取一个并不存在的属性时被调用;如果试图读取一个对象并不存在的属性的时候, php 就会给出错误的信息。如果在类里添加 __get 方法,并且我们可以用这个函数实现类似 java 中的反射的各种操作。 4 、 __set(string $name,mixed $value)给未定义的变量赋值时将被调用5 、 __call(string $name,array $arguments)当调用一个不可访问方法(如未定义,或者不可见)时, __call() 会被调用。__callStatic( string $name,array $arguments ) 当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时, __callStatic() 会被调用。 6 、 __toString()当打印一个对象的时候被调用,这个方法类似于 java 的 toString 方法,当我们直接打印对象的时候回调这个函数。7 、 __clone()当对象被克隆时调用。8 、 __sleep()serialize() 函数会检查是否存在一个魔术方法 __sleep . 如果存在, __sleep() 方法会先被调用, 然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组。如果该方法不返回任何内容,则 NULL 被序列化,导致 一个 E_NOTICE 错误。 __sleep 方法常用于提交未提交的数据,或类似的操作。同时,如果你有一些很大的对象,不需要保存,这个功能就很好用。9 、 __wakeup()与 __sleep() 相反, unserialize() 会检查是否存在一个 __wakeup 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象数据。 __wakeup 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。当对未定义的变量调用 isset() 或 empty() 时, __isset() 会被调用。 |
相关内容
- 详解php中反射的应用
- php – Zend Framework – 多板导航块
- php – 使用Theme My Login WordPress插件过滤’retrieve_p
- php – 使用JavaScript获取表单变量
- php – MySql查询通过保留最新的时间戳值来删除重复的行?
- php – WooCommerce在结帐页面上使用ajax添加自定义费用
- 什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
- php http请求内容原始数据enctype = multipart / form-data
- php – ob_start echo的字符串仍然存在
- php – 调用array()没有任何用途的参数?