Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dziedziczenie magicznych metod, __get($zmienna) i __set($zmienna, $wartosc)
Asmox
post
Post #1





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Chciałem zrobić uniwersalną implementację dla metody magicznej __get($var). W tym celu, w klasie abstractObject napisałem coś takiego:
  1.  
  2. public function __get($zmienna) {
  3. if (!property_exists($this, $zmienna)) {
  4. $exc = new ExceptionConceptor('Proba odwolania do nieistniejacego pola');
  5. $exc->addConcept('pole', $zmienna);
  6. throw $exc;
  7. }
  8. if (!isset($this->$zmienna)) {
  9. if (method_exists($this, 'pobierzPole'.ucfirst($zmienna)))
  10. call_user_func(array($this, 'pobierzPole'.ucfirst($zmienna)));
  11. }
  12. //return $this->$zmienna;
  13. }

Natomiast w klasie dziedziczącej coś takiego:
  1. public function __get($zmienna) {
  2. parent::__get($zmienna);
  3. return $this->$zmienna;
  4. }

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)
  1. public function __set($zmienna, $wartosc) {
  2. if ($this->blokada) {
  3. if (isset ($this->$zmienna)) {
  4. $exc = new abstractObjectException('Proba dostepu do zablokowanego pola');
  5. throw $exc;
  6. }
  7. else
  8. $this->$zmienna = $wartosc;
  9. }
  10. $this->$zmienna = $wartosc;
  11. echo $this->$zmienna;
  12. }


Jedno pytanie: dlaczego tak się dzieje? :-(

Ten post edytował Asmox 11.11.2011, 15:18:28
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 10:46