在调试一段程序,学习封装的过程中,会出现
Warning: The magic method __get() must have public visibility and cannot be static in C:\xampp\htdocs\php100\fuxi1.php on line 9
Warning: The magic method __set() must have public visibility and cannot be static in C:\xampp\htdocs\php100\fuxi1.php on line 18
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值在直接获取私有属性值的时候,自动调用了这个__get()方法
称呼:猪
在直接获取私有属性值的时候,自动调用了这个__get()方法
颜色:白色
在直接获取私有属性值的时候,自动调用了这个__get()方法
年龄:1岁
<?php
class animal3 {
//下面是人的成员属性, 都是封装的私有成员
private $name; //动物的称呼
private $color; //动物的颜色
private $age; //动物的年龄
//__get()方法用来获取私有属性
private function __get($property_name) {
echo “在直接获取私有属性值的时候,自动调用了这个__get()方法<br>”;
if(isset($this->$property_name)) {
return($this->$property_name);
} else {
return(NULL);
}
}
//__set()方法用来设置私有属性
private function __set($property_name, $value) {
echo “在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值”;
$this->$property_name = $value;
}
}
$pig =new animal3 ();
//直接为私有属性赋值的操作, 会自动调用__set()方法进行赋值
$pig ->name=”猪”;
$pig ->color=”白色”;
$pig ->age=’1岁’;
//直接获取私有属性的值, 会自动调用__get()方法,返回成员属性的值
echo “称呼:”.$pig ->name.”<br>”;
echo “颜色:”.$pig ->color.”<br>”;
echo “年龄:”.$pig ->age.”<br>”;
?>
对于PHP中的魔术对象中的__get() 和__set(),很多教程中出现类似的问题。主要原因为function __get()方法设置为了private私有属性。PHP中能识别并正确处理,但是它会警告我们function __get()和function __set()必须具备公有属性。即默认的不加private或者增加public,即不再出现该提示。