Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Metoda na niestniejącym polu
Forum PHP.pl > Forum > PHP > Object-oriented programming
Sokal
Mamy sobie taką klasę:
  1. <?php
  2. class foo
  3. {
  4. public function __get($name)
  5. {
  6. $this->$name = new $name();
  7. } 
  8. }
  9.  
  10. class bar
  11. {
  12. public function foobar()
  13. {
  14. echo 'działa biggrin.gif';
  15. }
  16. }
  17.  
  18. $foo = new foo();
  19. $foo->bar->foobar();
  20. ?>

Wywala error "Call to a member function foobar() on a non-object ...". Jak temu zaradzić? O.o

Robie:
  1. <?php
  2. $foo = new foo();
  3. $foo->bar;
  4. $foo->bar->foobar();
  5. ?>

I działa ale to się mija z celem :/

Chyba żadna magiczna metoda tego nie zrobi :/
A może jakaś super magiczna o której nikt nie wie? biggrin.gif

Pomysły?
sticker
a tu sie mylisz nie magiczna metoda ale funkcja to zrobi :]

z powodu braku kontroli typów musisz pokazać wewnątrz klasy jakiego typu jest obiekt wykorzystując taka oto funkcje
  1. <?php
  2. function typecast($old_object, $new_classname) {
  3. if(class_exists($new_classname)) {
  4. $old_serialized_object = serialize($old_object);
  5. $new_serialized_object = 'O:' . strlen($new_classname) . ':"' . $new_classname . '":' .
  6.  substr($old_serialized_object, $old_serialized_object[2] + 7);
  7. return unserialize($new_serialized_object);
  8. }
  9. else
  10. return false;
  11. }
  12. ?>


szukałem tego długo ale było mi niezbędne tongue.gif
Sokal
Głupie pytanie: jak to wykorzystać? biggrin.gif

Może mam jakieś zaćmienie dzisiaj, ale nie wiem ...
dr_bonzo
Sokal: a co ci ZWRACA __get() ?
Sokal
Aj, ale ja jestem głupi, niczego nie trzeba, tylko __get() smile.gif
  1. <?php
  2. class foo
  3. {
  4. public function __get($name)
  5. {
  6. return new $name();
  7. } 
  8. }
  9.  
  10. class bar
  11. {
  12. public function foobar()
  13. {
  14. echo 'działa biggrin.gif';
  15. }
  16. }
  17.  
  18.  
  19. $foo = new foo();
  20. $foo->bar->foobar();
  21. ?>


Dzięki dr_bonzo
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.