class User public $name; public $age; 基于这个类编写程序 $User = new User);$User->name = "Kingmax";$User->age = 30; foreach($User as $kev=>$value)echo $key.":".$value ."\n"; 以上例程会输出: name:Kingmax age : 30 如果我要以上例程输出的结果变成 姓名:Kingmax 年龄:30 要求只能改User类的代码,不能改执行部分的代码,请问如何实现? 请贴上你的User类的代码.
时间: 2024-04-12 21:34:33 浏览: 145
class User {
public $name;
public $age;
public function __toString() {
return "姓名:" . $this->name . "\n" . "年龄:" . $this->age;
}
}
$User = new User();
$User->name = "Kingmax";
$User->age = 30;
foreach($User as $key => $value) {
echo $key . ":" . $value . "\n";
}
以上例程输出的结果变成
姓名:Kingmax
年龄:30
相关问题
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类的代码,不能改执行部分的代码,请问如何实现?
要实现输出结果为“姓名:Kingmax”和“年龄:30”,可以在User类中使用魔术方法__get()和__set()。__get()方法会在访问不存在或不可访问的属性时被调用,而__set()方法会在给不存在或不可访问的属性赋值时被调用。
以下是修改后的User类代码:
class User
{
private $data = [];
public function __get($property)
{
if (isset($this->data[$property])) {
if ($property === 'name') {
return '姓名:'.$this->data[$property];
} elseif ($property === 'age') {
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()方法中对属性进行判断和处理,我们可以实现在访问属性时返回自定义的结果。在这个例子中,我们在访问name属性时返回“姓名:”加上实际的name值,在访问age属性时返回“年龄:”加上实际的age值。这样就实现了输出结果的要求。同时,我们使用一个私有数组data来存储属性和对应的值。在__set()方法中,我们将属性和值存储到data数组中。这样就保持了类的原始结构,只在魔术方法中进行处理。
阅读全文