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;
?>
内容版权声明:除非注明,否则皆为本站原创文章。
