[PHP]Delegowanie referencji
Ostatnio zmodyfikowano 2013-02-01 20:44
jsc Temat założony przez niniejszego użytkownika |
[PHP]Delegowanie referencji » 2013-01-31 19:13:21 Cześć! Wyznaczyłem sobie takie zadanie: 1) Zrób klasę, która będzie zawierała pewien obiekt główny i kilka współpracujących z nim 2) Obiekty współpracujące przy tworzeniu pobierają referencję do obiektu głównego i na nim dalej pracują 3) Obiekt nadrzędny i obiekty współpracujące z obiektem głównym klasy są powiązane relacją delegacji
I wszystko się rozbija o referencje (nie wiem jak powinno to prawidłowo wyglądać). |
|
DejaVu |
» 2013-01-31 19:54:38 $a = new Obiekt(); $b = $a;
$b - referencja do obiektu :P Obiekty w php zawsze są przekazywane przez referencję :) |
|
jsc Temat założony przez niniejszego użytkownika |
» 2013-01-31 20:03:49 Czyli nie trzeba cudować z &, a delegacje? |
|
DejaVu |
» 2013-01-31 22:27:48 Hm? Nie rozumiem :p |
|
jsc Temat założony przez niniejszego użytkownika |
» 2013-01-31 23:15:40 No ten szczególny przypadek "dziedziczenia", że klasy wkomponowane są jednocześnie klasami zagregowanymi w klasie głównej i jednocześnie ich interfejsy są jednocześnie interfejsami klasy głównej (bez takich: klasaGłówna -> klasaDelegowana -> dopieroWlasciwaMetoda () tylko od razu klasaGłówna -> dopieroWlasciwaMetoda ()). |
|
DejaVu |
» 2013-01-31 23:22:22 public function klasaDelegowana() { $this->klasaDelegowana->dopieroWlasiwaMetoda(); }
//... $klasaGlowna->dopieroWlasciwaMetoda () ;
|
|
jsc Temat założony przez niniejszego użytkownika |
» 2013-02-01 00:51:48 Aha, naiwnie sądziłem, że istnieje jakaś magiczna sztuczka wpinająca cały interfejs obiektu, ale poradzę sobie metodą __call ($funkcja, $parametry); Właściwie już tu mam zręby, która nieco automatyzuje zrządzanie delegowanymi metodami: <?php class caller { private $obiektWyłowawczy; // Wskażnik na obiekt, który powołuje do życia obiekt callera
private $znaneObiekty = array (); // Tu będzie obsługa powyższej tablicy, ale dla wygody pomijam
private $generatorMetod; // Iterator przeglądający klasy dla metod
public function __construct ($wylywacz) { $this -> obiektWyłowawczy = $wylywacz; }
public function __call ($metoda, $parametry) { $szukanaMetoda = $metoda . (explode (',', $parametry)); if (!$this -> generatorMetod ()) { $this -> generatorMetod = new ArrayIterator ($this -> znaneObiekty); } foreach ($this -> generatorMetod as $aktualnyObiekt) { $wygenerowanaMetoda = '$this -> ' . $this -> obiektWyłowawczy -> ' -> ' . $aktualnyObiekt . ' -> ' . $szukanaMetoda; if (function_exist ($wygenerowanaMetoda) { eval "$wygenerowanaMetoda"; } } }
} ?>
Teraz trzeba tylko: - utworzyć jego obiekt - w miarę tworzenia obiektów z delegowanymi metodami - umieścić odpowiednio spreparowane wywołanie za pomocą evala w metodzie __call (); |
|
jsc Temat założony przez niniejszego użytkownika |
» 2013-02-01 20:14:27 refresh |
|
« 1 » 2 |