最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

php 类的魔术方法有哪些

来源:懂视网 责编:小采 时间:2020-11-27 13:59:25
文档

php 类的魔术方法有哪些

php 类的魔术方法有哪些:php类的魔术方法有:1、__sleep方法,返回一个包含对象中所有应被序列化的变量名称的数组;2、__wakeup方法,与__sleep相反;3、__tostring方法,返回一个类被当做字符串时要输出的内容等等。推荐:《PHP视频教程》PHP类的魔术方法PH
推荐度:
导读php 类的魔术方法有哪些:php类的魔术方法有:1、__sleep方法,返回一个包含对象中所有应被序列化的变量名称的数组;2、__wakeup方法,与__sleep相反;3、__tostring方法,返回一个类被当做字符串时要输出的内容等等。推荐:《PHP视频教程》PHP类的魔术方法PH

推荐:《PHP视频教程》

PHP类的魔术方法

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

__sleep:返回一个包含对象中所有应被序列化的变量名称的数组。serialize函数在序列化类时首先会检查类中是否存在__sleep方法。如果存在,会先调用此方法然后再执行序列化操作。并且只对__sleep返回的数组中的属性进行序列化。如果__sleep不返回任何内容,则null会被序列化,并产生E_NOTICE级别的错误。__sleep不能返回父类的私有成员,否则会产生E_NOTICE级别的错误。对于一些很大但不需要保存全部数据的对象此方法很有用。

__wakeup:与__sleep相反,是在unserialize函数反序列化时首先会检查类中是否存在__wakeup方法,如果存在会先调用次方法然后再执行反序列化操作。用于在反序列化之前准备一些对象需要的资源,或其他初始化操作。

__tostring:返回一个类被当做字符串时要输出的内容,此方法必须返回字符串并且不能在此方法中抛出异常,否则会产生致命错误。在PHP5.2之前此方法只有在直接使用echo和print时才生效,之后则可以在任何字符串环境生效,如果将一个未定义__toString方法的对象转换为字符串,会产生致命错误。

__invoke:PHP5.3起,当尝试以函数的方式调用对象时,会调用此方法。

__set_state:PHP5.1起,当调用var_export函数导出类时,会调用此静态方法。此方法只有一个参数,是一个包含按属性为键,属性值为值的数组。此方法可以用来控制哪些成员可以被导出。

__debugInfo:PHP5.6起,当调用var_dump函数打印对象的属性时会调用此方法,此方法可以用来控制哪些属性可以被打印,如果没有定义此方法,则对象中所有的public、protected、private的属性都会被打印。返回一个包含可以被打印的属性的数组。

__construct:构造函数。

__destruct:析构函数。

__set、__get、__isset、__unset:重载属性。

__call、__callstatic:重载方法。

__clone:对象复制。

<?php
class A{
 private $var;
 public $var2="b";
 
 function __construct(){
 $this->var=mt_rand();
 }
 
 function __sleep(){
 return array("var","var2");
 }
 
 function __wakeup(){
 $this->var=mt_rand();
 }
 
 function __toString(){
 return "class[".__CLASS__."]:{var:$this->var,var2:$this->var2}\n";
 }
 
 function __invoke($arg){
 $this->var2=$arg;
 }
 
 static function __set_state($arr){
 $a=new A();
 $a->var=$arr['var'];
 return $a;
 }
}
$a=new A();
$str=serialize($a);
echo "$str\n";
$b=unserialize($str);
var_dump($b);
$b("inv-b");
echo $b;
eval('$c=' . var_export($b,true) . ';');
var_dump($c);
?>

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

php 类的魔术方法有哪些

php 类的魔术方法有哪些:php类的魔术方法有:1、__sleep方法,返回一个包含对象中所有应被序列化的变量名称的数组;2、__wakeup方法,与__sleep相反;3、__tostring方法,返回一个类被当做字符串时要输出的内容等等。推荐:《PHP视频教程》PHP类的魔术方法PH
推荐度:
标签: 方法 php 方法是
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top