在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload 1、__get、__set 4、__autoload 5、__construct、__destruct 在PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。
作者:胖子
以下代碼轉自: http://bbs.phphubei.com/thread-14850-1-1.html
代码
<?
/*当试图调用类中一个不存在或者不可用的方法时,会执行该类中的__call()__call()必须接受两个参数,第一个参数存放方法名称,第二个参数存放不存在的方法的参数(此参数会放在与该参数同名的数组中)*/ class callclass { function __call($method_name,$p) { echo "使用__call尝试调用一个不存在/不可用的成员方法<br>"; echo $method_name; echo "<pre>"; print_r($p); echo "</pre>"; } } $obj = new callclass(); $obj->method(1,2,"Hello","HP") ?> <? /* 当试图调用不存在或者不可见的属性时,调用__set(),必须要接受两个参数,属性名和属性值*/ class myShop { private $p = array(); function __set($name,$value) { echo 'set::属性名称:'.$name; echo 'set::属性值为:'.$value;echo "<br>"; $this->p[$name] = $value; } function __get($name) //取得属性的名称 { echo "get::$name<br>"; return array_key_exists($name,$this->p) ? $this->p[$name] : null; } } $shop = new myShop(); $shop->feiker=2; //访问不存在的属性,调用__set(); $shop->pear = 5; $shop->pear ++; //先调用__get(),因一开始只有名字,之后调用__set(); echo $shop->feiker; echo $shop->pear; echo '------------------------------------------------------------------------------------------'."<br>"; ?> <? //__unset()和__isset() class person {//私有属性 private $name,$sex,$age; function __get($property_name) {//获取私有属性的名称 if ( isset( $property_name ) ) echo $this->$property_name; } function __set($property_name,$value) { $this->$property_name = $value; echo "名称为:{$property_name}值为:{$value}<br>"; } function __isset($ff) {//__isset() echo "isset()函数测定私有成员属性是,自动调用<br>"; return isset($this->$ff); } function __unset($kk) {//__unset() echo "unset()是当在类的外部调用是,自动调用方法来删除私有成员变量<br>"; unset($this->$kk); } function a() { echo 'bb'.$this->name; } } $obj = new person(); $obj->name = "飞客"; //isset()测定私有成员变量 isset($obj->name); //自动调用删除私有成员变量 unset($obj->name); echo $obj->a(); //echo 'aaa'.$obj->name.'bbb'; //result : 飞客aaabbb ?>
http://bbs.phphubei.com/thread-7987-1-1.html
http://blog.51yip.com/php/947.html
http://zzk.cnblogs.com/s?w=php%20__set |
2022-08-18
2022-08-15
2022-08-17
2022-11-06
2022-08-17
请发表评论