批改状态:合格
老师批语:这些魔术方法都有一个对应的触发事件
1、代码练习
<?phpnamespace T1;class A{public $name='ldy';protected $age=30;private $sex='man';public function getname(){echo $this->name;}}$a=new A();echo "<h5>序列化对象</h5>",'<br>';$s=serialize($a);echo $s;echo "<h5>反序列化对象</h5>",'<br>';$A=unserialize($s);var_dump($A);echo'<br>';echo '反序列化后获取类名:'.get_class($A),'<br>';echo '<hr>';namespace T2;echo '<h3>自定义序列化和反序列</h3>';class A{public $name='ldy';protected $age=30;private $sex='man';public function getname(){echo $this->name;}public function __sleep(){//序列化时执行,序列化对象属性return ['name','sex'];}public function __wakeup(){ //反序列化时执行return $this->getname();}}$a=new A();echo "<h5>序列化对象</h5>",'<br>';$s=serialize($a);//序列化时,echo $s;echo "<h5>反序列化对象</h5>",'<br>';$A=unserialize($s);//反序列化类自动执行__wakeup(){};echo '<br>';var_dump($A);echo'<br>';echo '<hr>',"<h5>对象复制=和clone</h5>",'<br>';$name=new A();$c=$name;//引用又称别名$c->name='dacheng';echo '$c中name的值:'.$c->name,'<br>';echo '$name中name的值:'.$name->name,'<br>';$name=new A();$c=clone $name;//克隆一个新的类实例$c->name='dacheng';echo '$c中name的值:'.$c->name,'<br>';echo '$name中name的值'.$name->name,'<br>';
2、演示结果
1、代码
<?phpclass MyException extends Exception{public function __construct($message,$code){$this->message=$message;$this->code=$code;}public function __toString(){$str="异常错误提示:{$this->message}".'<br>'."异常提示代码:{$this->code}";return $str;}}class Login{public static $code;public function __construct($code){self::$code=$code;switch(self::$code){case 1:throw new MyException('密码错误',1);break;case 2:throw new MyException('账户错误',2);break;default:throw new MyException('未知异常',3);}}}try{$error=new Login(2);}catch(MyException $e){echo $e;}
2、运行结果
1、序列化:serialize();对象序列化对应的函数:__sleep(){}
2、发序列化:unserialize();对象反序列化(是生成一个新对象)的对应的函数:__wakeup(){}
3、对象的复制:clone关键字,对应的对象函数__clone(){};=把对象赋值给一个变量,是引用,就是别名
4、__toString(){}魔术方法:在直接输出对象时,自动调用
5、匿名类:new class{}:在接口实现部分功能和作为函数参数时使用
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号