Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Metoda na niestniejącym polu, Call to a member function foobar() on a non-object
Sokal
post
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


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. }
  15. }
  16.  
  17. $foo = new foo();
  18. $foo->bar->foobar();
  19. ?>

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? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 16:34