PHP面向对象程序设计重载(overloading)操作详解(3)
运行结果为:
输出这些“不存在的属性”的值:
a1->p1:1
a1->p2:2
a1->ac:avc
__ISSET($属性名):
当对一个对象不存在的属性进行isset()
判断时,就会自动调用内部方法:isset()
;
用法:
$v1 = isset($对象->不存在的属性); //此时会调用这个对象所属类中的魔术方法:isset()
例子:
<?php class A{ //定义一个属性, protected $prop_list = array(); //初始为空数组 //这个方法会在A的对象使用一个不存在的属性进行赋值时调用 function __set($p,$v){ //echo "使用不存在的属性!"; $this->prop_list[$p] = $v; } function __get($p){ if($this->prop_list[$p]){ return $this->prop_list[$p]; }else{ return "该属性不存在!"; } } function __isset($prop){ //__isset()是自定义的方法, isset()是系统函数 $re = isset($this->prop_list[$prop]); return $re; } } $a1 = new A(); $a1->p1 = 1;//不存在的属性名赋值,此时会调用_set(),并传过去"p1"和1 $a1->p2 = 2; $a1->ac = 'avc'; echo "<br />输出这些“不存在的属性”的值"; echo "<br />a1->p1:" . $a1->p1;//不存在的属性名取值,此时会调用_get(),并传过去"p1" echo "<br />a1->p2:" . $a1->p2; echo "<br />a1->ac:" . $a1->ac; //下面演示isset判断不存在的属性 $v1 = isset($a1->p1); //存在 $v2 = isset($a1->ppp1); //不存在 var_dump($v1); echo "<br />"; var_dump($v2); ?>
运行结果:
输出这些“不存在的属性”的值
a1->p1:1
a1->p2:2
a1->ac:avc
boolean true
boolean false
__UNSET($属性名)
当对一个对象不存在的属性进行unset()
销毁时,就会自动调用内部方法:unset()
;
<?php class A{ //定义一个属性, protected $prop_list = array(); //初始为空数组 //这个方法会在A的对象使用一个不存在的属性进行赋值时调用 function __set($p,$v){ //echo "使用不存在的属性!"; $this->prop_list[$p] = $v; } function __get($p){ if($this->prop_list[$p]){ return $this->prop_list[$p]; }else{ return "该属性不存在!"; } } function __unset($prop){ unset($this->prop_list[$prop]); } } $a1 = new A(); $a1->p1 = 1;//不存在的属性名赋值,此时会调用_set(),并传过去"p1"和1 echo "<br />a1->p1:" . $a1->p1;//不存在的属性名取值,此时会调用_get(),并传过去"p1" //下面演示unset销毁一个不存在的属性 unset($a1->p1); echo "<br />a1->p1:" . $a1->p1; ?>
内容版权声明:除非注明,否则皆为本站原创文章。