public function __get($zmienna) { if (!property_exists($this, $zmienna)) { $exc = new ExceptionConceptor('Proba odwolania do nieistniejacego pola'); $exc->addConcept('pole', $zmienna); throw $exc; } } //return $this->$zmienna; }
Natomiast w klasie dziedziczącej coś takiego:
public function __get($zmienna) { parent::__get($zmienna); return $this->$zmienna; }
Powiem szczerze, że jestem zszokowany koniecznością napisania czegoś takiego. Myślałem, że dziedzicząc __geta, klasa dziedzicząca pobierze normalnie swoje pole. Natomiast gdy mój kod wyglądał w ten sposób, że w klasie dziedziczącej nie było nic dotyczącego tej metody, a w abstractObject nie było komentarza przy returnie, wywalało mi komunikat:
Cytat
Notice: Undefined property: tag::$(tu nazwa zmiennej do której się odwoływałem) in...
Natomiast jeśli chodzi o dziedziczenie magicznej metody __set(), jest jeszcze gorzej. Kod wygląda tak: (klasa abstractObject)
public function __set($zmienna, $wartosc) { if ($this->blokada) { $exc = new abstractObjectException('Proba dostepu do zablokowanego pola'); throw $exc; } else $this->$zmienna = $wartosc; } $this->$zmienna = $wartosc; }
Jedno pytanie: dlaczego tak się dzieje? :-(