<?php //克隆clone()函数 class human{ public $age=20; public function __clone(){ echo '有人在克隆我'; } } $lisi= new human(); $wangwu= clone $lisi; //__get()函数 class human{ private $money =33; protected $age =23; public $name ='lily'; public function __get($p){ echo '你想访问我的',$p,'属性'// 其中的$p是可以随便替换的 } } $lily = new human(); echo $lily->name;// lily echo $lily->money;//你想访问的money属性 echo $lily->friend;//你想访问我的friend属性————流程 $lily->friend->没有此属性->__get('friend'); echo $lily->age;// 你想访问我的age属性 /* 可以总结出:当我们调用一个权限上不允许调用的属性时,__get()魔术方法会自动调用别且自动传参,本例中的 参数值是age age的属性无权调用时,则自动调用__get()方法,且把age以参数的形式传给__get() */ //set()函数 class stu{ private $money = 30; protected $age= 23; public $name='hmm'; public function __set($a,$b){ echo '你想设置我的',$a,'属性'; echo '且值是',$b,'<br>'; } } $hmm=new stu(); $hmm->aaa=111;// 你想设置我的aaa属性且值是111 stu Object ( [money:private] => 30 [age:protected] => 23 [name] => HM ) $hmm->age=36; //你想设置我的age属性且值是36 stu Object ( [money:private] => 30 [age:protected] => 23 [name] => HM ) $hmm->money=66; //你想设置我的money属性且值是66 stu Object ( [money:private] => 30 [age:protected] => 23 [name] => HM ) $hmm->name='HM';//你想设置我的name属性且值是H stu Object ( [money:private] => 30 [age:protected] => 23 [name] => HM ) print_r($hmm); //你想设置我的aaa属性且值是111 stu Object ( [money:private] => 30 [age:protected] => 23 [name] => HM ) /* __set()的总结 当为无权操作的属性或不存在的属性赋值时,set调用 且自动传两个参数:属性和属性值,例 $hmm->age=36;无权->调用__set('age',28) */ ///// __isset __unset echo '<hr>'; class dog{ public $leg=4; protected $bone='骨头'; public function __isset($p){ echo '你想判断我的',$p,'属性存不存在'; return 1;// 加上return无论判断什么都会返回存在这个属性 } public function __unset($p){ echo '你想去掉我的',$p,'?'; } } $hua= new dog(); if(isset($hua->leg)){// 有没有leg属性呀,用 isset判断一下 isset($hua->leg),如果(if)有,则echo echo $hua->leg; } if(isset($hua->tail)){ echo $hua->tail; }else{ return; //你想判断我的tail属性存不存在 } /* __isset()的方法 当isset判断对象不可见的属性时(protected/private/不存在的属性) 会引发__isset()来执行 问 isset($obb->xyz)属性,为真 能说明类声明了一个xyz的属性吗? 答不能,return1;起到保护作用 */ //unset() print_r($hua);//dog Object ( [leg] => 4 ) unset($hua->leg); unset($hua->bone); // 因为bone是受保护的,不能unset,会提示错误Cannot access protected //因此在声明对象的是加上public function __unset($p){echo '你想去掉我的',$p;} print_r($hua);// dog Object ( ) /** unset()方法 当时unset销毁对象的不可见属性(private/protectes/不存在的属性)会引发unset __unset(),会传参 **/
转载于:https://www.cnblogs.com/forphp/p/3456755.html