__construct、__destruct
)__construct
在类实例化的时候会调用。
__destruct
对象被手动销毁或垃圾回收机制收回前会被调用。
unt() ,对象=null
__t、__get、__ist、__unt
)public __t ( string $name , mixed $value ) : voidpublic __get ( string $name ) : mixedpublic __ist ( string $name ) : boolpublic __unt ( string $name ) : void
在给不可访问或不存在属性赋值时,__t
会被调用。
读取不可访问或不存在属性的值时,__get
会被调用。
当对不可访问或不存在属性调用 ist() 或 empty() 时,__ist
会被调用。
当对不可访问或不存在属性调用 unt() 时,__unt
会被调用。
参数中 name 是调用的属性名,value 是给属性指定的值。
__call、__callstatic
)public __call ( string $name , array $arguments ) : mixedpublic static __callstatic ( string $name , array $arguments ) : mixed
在对象中调用一个不可访问或不存在方法时,__call()
会被调用。
在类中调用一个不可访问或不存在的静态方法时,__callstatic
会被调用。
参数中 name 是调用的方法名,arguments 是传递给方法的参数,一个索引数组。
__tostring
public __北京中专学校tostring ( void ) : string
一个类被当成字符串时应怎样回应。例如 echo 或print 应该显示些什么。
此方法必须返回一个字符串,否则会发出一条 e_recoverable_error
级别的致命错误。
__invoke
__invoke ([ $... ] ) : mixed
当尝试以调用函数的方式调用一个对象时,__invoke
方法会被自动调用。
__sleep
和 __wakeup
public __sleep ( void ) : arraypublic __wakeup ( void ) : void
对一个对象进行序列化rialize()
操作时, __sleep
会被调用,返回一个包含对象希望被序列化的属性名的数组。
对象被序列化,即睡觉sleep前的操作,常用于清理数据。
对应的,一个对象醒来unrialize()
时会自动调用__wakeup
,用于重新做些初始化工作。
一个典型应用是,数据库连接对象的序列化,醒来时需要重新connect,如下面的例子。
<?phpclass connection{ protected $link; private $dsn, $urname, $password; public funct流经存在的邂逅ion __construct($dsn, $urname, $password) { $this->dsn = $dsn; $this->urname = $urname; $this->password = $password; $this->connect(); } private function connect() { $this->link = new pdo($this->dsn, $this->urname, $this->password); } public function __sleep() 电视剧坝上街 { return array('dsn', 'urname', 'pass线差word'); } public function __wakeup() { $this->connect(); }}?>
__rialize
和 __unrialize
public __rialize ( void ) : arraypublic __unrialize ( array $data 优乐美广告) : void
php 7.4.0.新增加的特性,作用跟sleep和wakeup差不多,但优先级更高,且参数和返回值稍有差异,__rialize
是返回一个键值对的关联数组,此数组将作为参数 data 传递给__unrialize
。
示例如下:
<?phpclass connection{ protected $link; private $dsn, $urname, $password; public function __construct($dsn, $urname, $password) { $this->dsn = $dsn; $this->urname = $urname; $this->password = $password; $this->connect(); } private function connect() { $this->link = new pdo($this->dsn, $this->urname, $this->password); } public function __rialize(): array { return [ 'dsn' => $this->dsn, 'ur' => $this->urname, 'pass' => $this->password, ]; } public function __unrialize(array $data): void { $this->dsn = $data['dsn']; $this->urname = $data['ur']; $this->password = $data['pass']; $this->connect(); }}?>
__t_state
static __t_state ( array $properties ) : object
自 php 5.1.0 起,当调用 var_export() 导出类时,此静态方法会被自动调用。
本方法的唯一参数是一个数组,其中包含按 array(‘property’ => value, …) 格式排列的类属性。
关于这个方法,有很多困惑,下面提供几个链接,可以参看。
class dummy { private $value1_; private $value2_; function __construct() { $this->value1_ = 100; $this->value2_ = "100"; }}$adummy = new dummy();var_export($adummy);
输出
dummy::__t_state(array( 'value1_' => 100, 'value2_' => '100', ))
加上state方法后
class dummy { private $value1_; private $value2_; function __construct() { $this->value1_ = 100; $this->value2_ = "100"; } static function __t_state(array $array) { foreach($array as $k => $v) { echo("$k ==> $v <br/>"); } }}
输出为
value1_ ==> 100value2_ ==> 100
__clone
__clone ( void ) : void
当对象复制完成时调用
__debuginfo
__debuginfo ( void ) : array
打印所需调试信息,当用 var_dump() 打印一个对象时,此方法会被调用。
本文发布于:2023-04-08 10:52:33,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/14ba06b79ce38f382dd02607adae5410.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP类的魔术方法详解.doc
本文 PDF 下载地址:PHP类的魔术方法详解.pdf
留言与评论(共有 0 条评论) |