在通过__set($propertyname,$value)设置private成员属性时,
用$this->$propertyname = $value的写法才可以进行private变量值的修改,
采用$this->propertyname = $value的写法则不能进行变量值的修改。
完整代码:
class BasePerson{
<code> private $name;
private $age;
private $average;
function __construct(){
$num_args = func_num_args();
if($num_args == 1){
$this->name = func_get_arg(0);
} elseif($num_args == 2){
$this->name = func_get_arg(0);
$this->age = func_get_arg(1);
} elseif($num_args == 3){
$this->name = func_get_arg(0);
$this->age = func_get_arg(1);
$this->average = func_get_arg(2);
}
}
private function __set($propertyName,$propertyValue){
echo "</br>BasePerson __set()";
if($propertyName == "name"){
if($propertyValue == "zhangsan" || $propertyValue == "wangwu"){
$this->$propertyName = $propertyValue;
}
} elseif($propertyName=="age"){
if($propertyValue >150 || $propertyValue <0){
return ;
}
}
$this->$propertyName = $propertyValue;
}
function __toString(){
return "</br>name:".($this->name)."</br>age:".($this->age)."</br>average".($this->average);
}
</code>}
在通过__set($propertyname,$value)设置private成员属性时,
用$this->$propertyname = $value的写法才可以进行private变量值的修改,
采用$this->propertyname = $value的写法则不能进行变量值的修改。
完整代码:
class BasePerson{
<code> private $name;
private $age;
private $average;
function __construct(){
$num_args = func_num_args();
if($num_args == 1){
$this->name = func_get_arg(0);
} elseif($num_args == 2){
$this->name = func_get_arg(0);
$this->age = func_get_arg(1);
} elseif($num_args == 3){
$this->name = func_get_arg(0);
$this->age = func_get_arg(1);
$this->average = func_get_arg(2);
}
}
private function __set($propertyName,$propertyValue){
echo "</br>BasePerson __set()";
if($propertyName == "name"){
if($propertyValue == "zhangsan" || $propertyValue == "wangwu"){
$this->$propertyName = $propertyValue;
}
} elseif($propertyName=="age"){
if($propertyValue >150 || $propertyValue <0){
return ;
}
}
$this->$propertyName = $propertyValue;
}
function __toString(){
return "</br>name:".($this->name)."</br>age:".($this->age)."</br>average".($this->average);
}
</code>}
<code>$name = 'test'; $$name = '123'; var_dump($test); //输出123 //希望你能理解 //同理 $this->$proertyName //需要看$proertyName的值, 是设置$proertyName的值这个属性 $proertyName = 'age'; $this->$proertyName = '12'; var_dump($this->age); //输出12 $this->proertyName //设置的是proertyName这个属性</code>
楼主,$this->$propertyName = $value 这样的赋值是$this实例中变量为$propertyName变量的值,此处的$propertyName仍然是个变量,而$this->propertyName就是$this的属性了;
前者的情况是这样的,例如$propertyName = 'enable';
那么$this->$propertyName 就等同与 $this->enable;
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号