Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dynamiczne tworzenie obiektu w obiekcie
deirathe
post 31.07.2008, 08:44:01
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


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??

Ten post edytował deirathe 31.07.2008, 08:55:26


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
krowal
post 31.07.2008, 09:13:21
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


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"


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
rafalp
post 31.07.2008, 09:14:19
Post #3





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

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


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.

Ten post edytował rafalp 31.07.2008, 09:15:24


--------------------
Go to the top of the page
+Quote Post
mike
post 31.07.2008, 09:15:38
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


$this->metoda()-> i cos jeszcze ..., czym są Fluent Interfaces
Go to the top of the page
+Quote Post
deirathe
post 31.07.2008, 09:34:52
Post #5





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


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. ?>


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
mike
post 31.07.2008, 09:38:14
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~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.
Go to the top of the page
+Quote Post
deirathe
post 31.07.2008, 10:38:36
Post #7





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


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. ?>


Ten post edytował deirathe 31.07.2008, 09:43:59


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 06:10