Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[PHP]Delegowanie referencji

Ostatnio zmodyfikowano 2013-02-01 20:44
Autor Wiadomość
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ć).
P-75480
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ę :)
P-75489
jsc
Temat założony przez niniejszego użytkownika
» 2013-01-31 20:03:49
Czyli nie trzeba cudować z &, a delegacje?
P-75493
DejaVu
» 2013-01-31 22:27:48
Hm? Nie rozumiem :p
P-75515
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 ()).
P-75519
DejaVu
» 2013-01-31 23:22:22
public function klasaDelegowana()
{
$this->klasaDelegowana->dopieroWlasiwaMetoda();
}

//...
$klasaGlowna->dopieroWlasciwaMetoda () ;
P-75520
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 ();
P-75523
jsc
Temat założony przez niniejszego użytkownika
» 2013-02-01 20:14:27
refresh
P-75568
« 1 » 2
  Strona 1 z 2 Następna strona