<?php
error_reporting(E_ALL | E_STRICT);class mycls{
private $p=1;
/** 被重载的数据保存在此 */
private $data = array();
function func()
{
echo "none static";
}
/* public function __set($name,$value)
{
echo "Setting '$name' to '$value'<br>\n";
$this->$name = $value;
} */
public function __get($name)
{
echo "Getting '$name' <br>\n";
return $this->$name;
}
}
$my=new mycls;$my->a=10; //
echo $my->a;
?>
error_reporting(E_ALL | E_STRICT);class mycls{
private $p=1;
/** 被重载的数据保存在此 */
private $data = array();
function func()
{
echo "none static";
}
/* public function __set($name,$value)
{
echo "Setting '$name' to '$value'<br>\n";
$this->$name = $value;
} */
public function __get($name)
{
echo "Getting '$name' <br>\n";
return $this->$name;
}
}
$my=new mycls;$my->a=10; //
echo $my->a;
?>
当然就不会调用 __get 啦
如果你把代码里__set 那段注释去掉,就会发现 __set会被调用,偏偏就是 __get 不会被调用,为何?
private $p=1;
/** 被重载的数据保存在此 */
private $data = array();
function func()
{
echo "none static";
} public function __set($name,$value)
{
echo "Setting '$name' to '$value'<br>\n";
$this->data[$name] = $value;
}
public function __get($name)
{
echo "Getting '$name' <br>\n";
return $this->data[$name];
}
}$my=new mycls;$my->a=10; // echo $my->a;
/** 只有从类外部访问这个属性时,重载才会发生 */
private $hidden = 2;这个:echo "Privates not visible outside of class, so __get() is used...\n";
echo $obj->hidden . "\n";
为什么会提示"没有定义的"变量?类里面明明不是定义了(虽然是 private) 吗?
我明白了,这个是“不可见”的,所以会调用 __get
对头,__get公有方法访问私有属性。