class study{
private $name;
private $age;
function say(){
echo "我的名字是:".$this->name.",我的年龄是:".$this->age ;
}
function __set($k,$v){
echo "1111";
}
}
$lisi=new study();
$lisi->age=100;
我按老师视频里书写的,视频里老师的zend没有报错,而我的报错了,说age是私有属性....,难道因为视频是11年的所以,如今变化很大?还是需要什么设置?我发现我按老师说的很多魔术方法都会使用时报错,很苦恼~求助!!
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
楼主的调用没有错啊。
假设有一个类,类中有一个私有变量$name
按照常理面向对象是不允许你这样调用的
PHP中__set的功能就是让你可以这么做,具体的流程是这样的,当PHP解析器看到你正在使用对象调用一个私有变量,这时它本想着报错呢,可是又发现你的类中有一个__set()方法,于是它就不报错,而自动执行__set()方法了
上面的__set()方法其实很简陋,只echo "here";了,既然它在上面所说的这种情况下自动调用,那我就可以在这种情况下完善一下__set()方法,让它去做你想干的事。
你写的没错啊,就是因为age是私有属性才会有
__set()与__get()