Возникли проблемы при получении __set для установки и __get для получения в PHP - PullRequest
0 голосов
/ 10 ноября 2011

Согласно этому ответу здесь: Getter and 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

Есть ли что-то, что я здесь делаю неправильно?

Ответы [ 3 ]

3 голосов
/ 10 ноября 2011

Ваша непосредственная проблема заключается в том, что вам придется использовать "username" вместо неопределенного $username при передаче имени свойства в функцию.

Однако это не то, как работают магические геттеры и сеттеры впервое место.Вы должны установить, используя $user->username = "someuser";, который автоматически вызовет сеттер:

$user=new UserInfo;
$user->username = "someuser";
echo $user->username;
1 голос
/ 10 ноября 2011

Когда эта строка называется:

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

в области видимости нет $ username, и вы передаете нулевой параметр в вызов метода.

Звонок должен быть

$user->__set('username', 'someuser');
1 голос
/ 10 ноября 2011

Для установки:

$user->username = "user";

Для получения:

$username = $user->username;
...