@CuteOne: Metody magiczne powinny być publiczne, bo oczekujemy publicznego/globalnego dostępu do nich. Niemniej metody zadeklarowane jako prywatne również działają, co jest karygodnym błędem twórców PHP (zdaje się że w wersji 5.3 PHP pojawiał się w tej sytuacji WARNING).
Jednak nie o to mi chodziło we wcześniejszej odpowiedzi. Łopatologicznie:
przykład, w którym nie korzystamy z metod __set() i __get()class A {
public $a;
public function __set($key, $value) {
$this->$key = $value;
}
public function __get($key) {
return $this->$key;
}
}
$o = new A;
$o->a = 10;
Ponieważ właściwość $a klasy A jest właściwością publiczną,
mamy do niej bezpośredni dostęp za pomocą operatora wyłuskania -> i magiczne metody __set() i __get() nie będą w tej sytuacji wywoływane.
przykład, w którym korzystamy z metod __set() i __get()class A {
private $a;
public function __set($key, $value) {
$this->$key = $value;
}
public function __get($key) {
return $this->$key;
}
}
$o = new A;
$o->a = 10;
Ponieważ właściwość $a klasy A jest właściwością prywatną,
nie mamy do niej bezpośredniego dostępu za pomocą operatora wyłuskania -> i tutaj potrzebujemy magicznych metod __set() i __get() - tutaj będą one wywoływane.
Niemniej wykorzystanie tych metod magiczny w ten sposób jest bez sensu, bo musielibyśmy dokładnie kontrolować wszystkie właściwości klasy. Rozwiązanie, które podał CuteOne ma zdecydowanie większy sens.