*什么时候自动调用: 就会在调用一个对象中不存的的方法时自动调用*处理一些不存在方法的错误调用*这个方法需要两个参数*__toString()*直接输出对象引用时自动调用, 用来快速获取对象的字符串表示的最便捷的方式__clone()*克隆对象使用clone去处理*原本 (原来的对象)*复本 (复制出来的对象)* __clone()就是在克隆对象时自动调用的方法* 只要一个对象一诞生,就要有初使化的动作, 和构造方法__construct作用相似* 在__clone()方法中的 $this关键字,代表的是复本, $that代表原本对象*__autoload()*注意: 其它的魔术方法都是在类中添加起作用, 这是一个唯一一个不在类中添加的方法*只要在页面中使用到一个类,只要用到类名就会自动将类名传给这个参数* 对象串行化(序列化): 将一个对象转为二进制串 (对象是存储在内存)* 1. 将对象长时间存储在数据库或文件中时* 2. 将对象在多个PHP文件中传输时*serialize() : 参数是一个对象, 返回来的就是串行化后的二进制串*unserialize() : 参数就是对象的二进制串, 返回来的就是新生成的对象* *__sleep()* 是在序列化时自动调用的方法*作用:就是可以将一个对象部分串行化*只要这个方法中返回一个数组,数组中有几个成员属性就序列化几个成员属性,如果不加这个方法,则所有成员都被序列化*__wakeup()*是在反序列化时自动调用的方法*也是对象重新诞生的一个过程(__construct(), __clone(),__wakeup()) class Person {var $name;protected $age;protected $sex;static $country="中国";const HOST="localhost";function __construct($name, $age, $sex){$this->name=$name;$this->sex=$sex;$this->age=$age;echo "###################<br>";}function getCountry(){return self::$country;}function setCountry($country){self::$country=$country;}function say(){echo "我的名-{$this->name}:,我的年龄:{$this->age},我的性别:{$this->sex}.<br>";} function eat(){echo "wwwwwwwwwwwwwwww"; }function __call($methodName, $args){echo "你调用的方法{$methodName}(参数:";print_r($args);echo ")不存在<br>";}static function hello(){echo "{$this->name} @@@@@@@@@@@@@@<br>";}function run(){echo self::HOST;}function __toString(){return "{$this->name}1234567898765432123567898765432";}function __clone(){$this->name="复本 张三";$this->age=0;}function __sleep(){return array("name", "age");}function __wakeup(){$this->name="sanzhang";$this->age=$this->age+1;}function __destruct(){echo $this->name."<br>";} }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)