魔术方法__set()和__get()是不是一定要声明为public? 魔术方法__set()和__get()是不是一定要声明为public?我的声明为private时,在类外面调用,浏览器提示为“要将__set()和__get()设为public”,可是很多资料书上都可以声明为private啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的,一定要声明为public,只用这要,才能在外部访问很多资料书上都可以声明为private啊请永远的删除这些资料,因为他是在骗你! 最近正好看魔术方法这章呢.. 我只知道__set()和__get()是针对private变量的取值赋值来定义的..由于是系统自己调用 所以我觉得魔术变量是不受访问符限制的吧 .. 所以自己本身一般不会来声明为public或者private 但是如果你在类外自己调用的话 应该会受到访问符限制吧 标记一下 一会儿回来看正确答案.. 是不是默认的就已经是public了? 还真没试过自己在类外调用魔术方法的..不是应该系统调用吗? 自己调用这有意义吗? 默認是public的,這些方法是對象自己調用的,当設置或读取一個不存在的属性時,这两个方法会自动调用。 class T { function __set($name, $value) { echo "你试图对属性 $name 赋值为 $value"; } function __get($name) { echo "属性 $name 尚不存在"; }}$p = new T;$p->aaa = 123;$p->aaa; <?phpclass Person{ private $name; private $sex; private $age; function __construct($name="",$sex="男",$age=9){ $this->name=$name; $this->sex=$sex; $this->age=$age; } private function __set($propertyName,$propertyValue){ if($propertyName=="sex"){ if(!(propertyValue=="男")||(propertyValue=="女")) return; } if($propertyName=="age"){ if(($propertyValue>150)||($propertyValue<0)) return; } $this->propertyName=$propertyValue; } public function say(){ echo "My name is ".$this->name.",Sex:".$this->sex.",Age:".$this->age."<br>."; } }$person1=new Person("zhangsan","男",20);$person1->name="李四";$person1->sex="女";$person1->age=80;$person1->sex="保密";$person1->age=800;$person1->say();?> 手册上写得很明确:http://www.php.net/manual/zh/language.oop5.overloading.php"所有的重载方法都必须被声明为public。" 寻找创业合作伙伴,开校园订餐网 做了个php论坛,请大家看看 出售php168分类信息系统 贴一个配置文件,大家帮我看看那里有问题。 上传图片问题 phpexcel生成的excel怎么设置自定义纸张 PHP笔试题,谁来帮忙解答一下 求最好用的php建模软件 关于接口的问题 同一句子放循环内则错 PHP现在用途疑惑 discuz.语言包切换 (中英双语切换)
请永远的删除这些资料,因为他是在骗你!
function __set($name, $value) {
echo "你试图对属性 $name 赋值为 $value";
}
function __get($name) {
echo "属性 $name 尚不存在";
}
}$p = new T;
$p->aaa = 123;
$p->aaa;
private $name;
private $sex;
private $age;
function __construct($name="",$sex="男",$age=9){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
private function __set($propertyName,$propertyValue){
if($propertyName=="sex"){
if(!(propertyValue=="男")||(propertyValue=="女"))
return;
}
if($propertyName=="age"){
if(($propertyValue>150)||($propertyValue<0))
return;
}
$this->propertyName=$propertyValue;
}
public function say(){
echo "My name is ".$this->name.",Sex:".$this->sex.",Age:".$this->age."<br>.";
}
}$person1=new Person("zhangsan","男",20);
$person1->name="李四";
$person1->sex="女";
$person1->age=80;
$person1->sex="保密";
$person1->age=800;
$person1->say();?>
http://www.php.net/manual/zh/language.oop5.overloading.php"所有的重载方法都必须被声明为public。"