Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Singleton - problem
Forum PHP.pl > Forum > PHP
bartyk
console_class.php:
  1. <?php
  2.  
  3. class console_class {
  4.  
  5. var $content;
  6. var $window;
  7. var $title;
  8.  
  9. function &singleton() {
  10.  
  11. static $instance;
  12.  
  13. if (!isset($instance)) {
  14. $instance=new console_class();
  15. }
  16. return $install;
  17. }
  18.  
  19. function set_console($window, $title) {
  20.  
  21. $this->content='';
  22. $this->window=$window;
  23. $this->title=$title;
  24. }
  25.  
  26. ......
  27.  
  28. }
  29.  
  30. ?>


main.php:
  1. <?php
  2.  
  3. require_once('class.console.php');
  4.  
  5. var $MyConsole;
  6.  
  7. $MyConsole = &console_class::singleton();
  8. $MyConsole->set_console(&#092;"nazwa\", \"tytul\");
  9. ....
  10.  
  11. ?>


niestety pojawia sie komunikat:
Fatal error: Call to a member function on a non-object in ...

wskazując na linię z wywołaniem metody set_console

Gdzie tkwi błąd?
kubatron
Popatrz Signeleton masz w $instance a potem dajesz return do $install czy to nie dziwne??
bartyk
Zdecydowanie powinienem się przespać laugh.gif

Błąd był tak oczywisty, że go nie zauważyłem sad.gif

Jeszcze jedno pytanie: jaki jest zasięg zmiennej $MyConsole? W jaki sposób odwołać się do funkcji z poziomu np. innej klasy?

Sorki za to lamerstwo, ale to moje początki sad.gif
M4chu
Nie mozesz uzywac 'var' poza klasą, gdybys przetestowal to co wyslales to bys parse errora dostal.
W ten sposob jaki to napisales to $MyConsole ma zasięg pojedynczy. A jak sie odwolac z poziomu innej klasy? Przez singletona oczywiscie ;p
bartyk
Nie wiem czy dobrze zrozumialem sad.gif

Czyli wywołanie z innej klasy powinno być następujące?? (zakładam, że klasa console_class ma metode pisz()
  1. <?php
  2.  
  3. class nowa{
  4.  
  5.  function test() {
  6.  $konsola = &console_class::singleton();
  7.  $konsola->pisz();
  8.  }
  9. }
  10.  
  11. ?>
NuLL
  1. <?php
  2.  
  3.  
  4. class console_class {
  5.     
  6.     var $content;
  7.     var $window;
  8.     var $title;
  9.     
  10.     function &&#092;singleton() {
  11.         
  12.         if (!isset($GLOBALS['console_class'])) {
  13.             $GLOBALS['console_class']=&new console_class();
  14.             }
  15.         return $GLOBALS['console_class'];
  16.         }
  17.         
  18.     function set_console($window, $title) {
  19.         
  20.         $this->content='';
  21.         $this->window=$window;
  22.         $this->title=$title;
  23.         }
  24.         
  25. ......
  26.  
  27. }
  28.  
  29. ?>

Do czegos takiego moze sie dowolac z dowolnego miejsca jeślo chodzi o php v5 of corz
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.