<?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;
?>
解决方案 »
- ☆在线等!!!☆PHP调用Java WebService!!!【加急!!!】
- php下载文件的问题
- 有点迷惑!
- PHP图像处理高手教教我吧,谢谢了
- 新人求解关于smarty中 include file的问题
- 快分,问题双开, php_manual 代码里的单引号和双引号问题..
- 关于SQL语句的问题!我在线等!(答对就给分)
- 请大家谈谈PHP开发的经验,包括使用的技术等方面!!!
- fsockopen()怎么使用?
- PHP如何遍历sqlserver存储过程返回的多个表
- 哥哥们 救救我 UCenter 的配置 通信失败 真邪门了 听说标题长就恨!!!!!!!!!!!!!!!!!
- new static()是做什么用的?
当然就不会调用 __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公有方法访问私有属性。