Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne tworzenie obiektu w obiekcie
Forum PHP.pl > Forum > PHP
deirathe
Istnieje mozliwosc aby php dynamicznie tworzyl obiekt w obiekcie powiedzmy, chcialbym uzyskac taki efekt:
Kiedy wpisuje
  1. <?php
  2. $obiekt1->obiekt2->obiekt3 = "wartosc";
  3. ?>
, to automatycznie tworza sie obiekty obiekt2 zawarty w obiekt1 i obiekt3 zawarty w obiekt2.
Szukalem tematu na forum ale nie wiedzialem jakich slow kluczowych uzyc mo ze dlatego nic nie znalazlem wiec z gory przepraszam jezeli podobny temat juz istnieje.
A może istnieje jakis sposób przeładowania operatorów??
krowal
Proponuję coś takiego:
  1. <?php
  2. class GetSet{
  3. private $object;
  4. private $values;
  5.  
  6. public function __get($name){
  7. $this->object = new GetSet();
  8. return $this->object;
  9. }
  10.  
  11. public function __set($name, $value){
  12. $this->values[$name] = $value;
  13. }
  14. }
  15.  
  16. $o = new GetSet();
  17. $o->object1->object2 = 'wartosc';
  18. ?>

Metodę __get można by usprawnić żeby tworzyła obiekty tylko wtedy gdy nazwa wywoływanej zmiennej składowej zaczynałaby się np ciągiem object_xx, itp, zależy do czego Ci to potrzebne, można sobie robić co się chce. Zainteresuj się tematem "magic methods"
rafalp
A czy coś z metody __get() by się nie wykombinowało?

np.

__get($objekt1, $objekt2)
{

...

}

[edit]
no widzę że @krowal już ładnie to wyjaśnił to się dalej nie rozpisuje.
deirathe
Ale mi tu bardziej chodzi o właściwości niż metody :? rozwiązanie krowala nie jest elastyczne, chce miec mozliwosc wywolywania, np
  1. <?php
  2. $obj1->wart1->wart2 = "aasa
  3. ?>
" i np
  1. <?php
  2. $obj1->wart4= "aaa";
  3. ?>
mike
~deirathe rozwiązanie, które podał ~krowal to przykład. Pokombinuj sam. Wiesz już że masz korzystać z metod magicznych __set() i __get() i zwracać obiekty.
Ciężko samemy spróbować? Nie wmawiaj mi tylko, że w 15min. testowałeś i próbowałeś i Ci nie wyszło rusz tyłek i testuj.

Wszyscy tylko "chce", "chce", "chce". Chcesz? To se zrób.
deirathe
ok, prosze:
przykład:
  1. <?php
  2. class GetSet{
  3. private $object;
  4. private $values;
  5.  
  6. public function __get($name){
  7. $this->object = new GetSet();
  8. return $this->object;
  9. }
  10.  
  11. public function __set($name, $value){
  12. $this->values[$name] = $value;
  13. }
  14. }
  15.  
  16. $o = new GetSet();
  17. $o->object1->object2 = 'wartosc';
  18.  
  19. $o->asas->asas->sdadad->aad = 'asasa';
  20. echo $o->asas->asas->sdadad->aad;
  21. echo "<pre>";
  22. print_r($o);
  23. ?>

wywala blad i rozkminiam dlatego napisalem, to nie jest tak ze tylko chce i chce i siedze i nic nie robie bo caly czas to testuje tylko pisze na biezaco a nie czekam na rozwiazanie i jestem wdzieczny ze ktos mi odpisal i dziekuje tu krowalowi

Ok rozwiazanie (dzieki krowalowi)
  1. <?php
  2. class GetSet{
  3. public $object;
  4. public $value;
  5.  
  6. public function __get($name){
  7. if(!is_object($name))
  8. $this->$name = new GetSet();
  9.  
  10. return $this->$name;
  11. }
  12.  
  13. public function __set($name, $value){
  14. $this->$name = $value;
  15. }
  16. }
  17. $o = new GetSet();
  18.  
  19. $o->asas->aad = 'as567asa';
  20. $o->data = "afasfff";
  21. $o->asas->asas->sdadad->aad = 'asasa';
  22. echo $o->asas->aad;
  23. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.