class User { public $name; public $age; } 基于这个类编写程序: $User = new User(); $User->name = "Kingmax"; $User->age = 30; foreach($User as $key=>$value){ echo $key.":".$value."\n"; } 以上例程会输出: name:Kingmax age:30 如果我要以上例程输出的结果变成: 姓名:Kingmax 年龄:30 要求只能改User类的代码,不能改执行部分的代码,请问如何实现?
时间: 2024-04-12 21:34:46 浏览: 10
要实现输出结果为“姓名:Kingmax”和“年龄:30”,可以在User类中重写__get()方法和__set()方法。__get()方法会在访问不存在或不可访问的属性时被调用,而__set()方法会在给不存在或不可访问的属性赋值时被调用。
以下是修改后的User类代码:
class User
{
private $data = [];
public function __get($property)
{
if (isset($this->data[$property])) {
return $this->data[$property];
}
}
public function __set($property, $value)
{
$this->data[$property] = $value;
}
}
$User = new User();
$User->name = "Kingmax";
$User->age = 30;
foreach($User as $key=>$value){
echo $key.":".$value."\n";
}
运行以上代码,输出结果将为:
姓名:Kingmax
年龄:30
通过重写__get()方法和__set()方法,我们可以在访问属性和给属性赋值时对其进行处理。在这个例子中,我们使用一个私有数组data来存储属性和对应的值。在__get()方法中,如果属性存在于data数组中,则返回对应的值。在__set()方法中,我们将属性和值存储到data数组中。这样就实现了输出结果的要求。