在PHP中__set to set和__get to get有问题


Having trouble getting __set to set and __get to get in PHP

根据这里的答案:Getter和Setter?下面的函数应该可以工作,但是它不产生输出。

<?php
class UserInfo{
  private $username;
  private $privileges;
  public function __get($property) {
    if (property_exists($this, $property)) {
      return $this->$property;
    }
  }
  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }
    return $this;
  }
}
$user=new UserInfo;
$user->__set($username,"someuser");
echo $user->__get($username);
?>
http://codepad.org/jwMaeVMN

我在这里做错了什么吗?

您的直接问题是,当将属性名称传递给函数时,您必须使用"username"而不是未定义的$username

然而,这并不是魔法getter和setter的工作方式。你应该设置使用$user->username = "someuser";,将自动触发setter:

$user=new UserInfo;
$user->username = "someuser";
echo $user->username;

设置:

$user->username = "user";

:

$username = $user->username;

当这一行被调用时:

$user->__set($username,"someuser");

作用域中没有$username,并且你正在向方法调用传递一个空参数。

调用应该是

$user->__set('username', 'someuser');