Присвоение значения методу установки в PHP - PullRequest
0 голосов
/ 02 июня 2011

У меня есть этот класс, который позволяет мне изменить частное свойство data с помощью метода setData:

abstract class FooBase{

  public function __set($name, $value){
    $setter = 'set'.ucfirst($name);
    if(method_exists($this, $setter)) return $this->$setter($value);
    throw new Exception("Property {$setter} is not defined.");
  }

}

class Foo extends FooBase{

  static $instance;
  private $data;

  public static function app(){
    if(!(self::$instance instanceof self)){
      self::$instance = new self();
      self::app()->data = array('a' => 'somedata', 'b' => 'moredata');
    }
    return self::$instance;
  }

  public function setData($newdata){
    $this->data = $newdata;
  }
}

Таким образом, чтобы изменить это, я называю это как:

Foo::app()->data = array('a' => 'newdata', 'b' => 'morenewdata');

Мне было интересно, можно ли как-то изменить только одно значение массива из $data, например:

Foo::app()->data['a'] = 'newdata'; // <-- this doesn't work, but it's what I would like to do...

1 Ответ

2 голосов
/ 02 июня 2011

Вы можете сделать это, если данные были общедоступными, а не частными. Приватный означает, что только объект может получить это значение внутри. Общественность позволит вам сделать это. Либо так, либо создайте метод, который будет делать то, что вы хотите, так как он может получить доступ к массиву внутри, оставляя данные закрытыми.

...