Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Przekazywanie obiektów
sannin
post 4.10.2012, 22:00:27
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Witam,
mam problem z przekazaniem referencji obiektu. A mianowicie:

Klasa View:
  1. class View {
  2. private $mConfig = null;
  3. private $mSmarty = null;
  4.  
  5. /* konstruktor */
  6. public function __construct($pConfig) {
  7. /* ładowanie biblioteki */
  8. require_once('system/smarty/Smarty.class.php');
  9.  
  10. $this->mConfig = $pConfig;
  11. $this->mSmarty = new Smarty();
  12.  
  13. /* konfiguracja */
  14. $this->mSmarty->setTemplateDir('/application/views/');
  15. $this->mSmarty->setCompileDir('/application/smarty/compile/');
  16. $this->mSmarty->setConfigDir('/application/smarty/config/');
  17. $this->mSmarty->setCacheDir('/application/smarty/cache/');
  18.  
  19. $this->mSmarty->debugging = $this->mConfig->get('debugging');
  20. $this->mSmarty->caching = $this->mConfig->get('caching');
  21. $this->mSmarty->cache_lifetime = $this->mConfig->get('cache_lifetime');
  22. }
  23.  
  24. /* podstawianie wartości do klucza */
  25. public function assign($pKay, $pValue){
  26. $this->mSmarty->assign($pKey, $pValue);
  27. }
  28.  
  29. /* wyświtlanie widoku */
  30. public function display($pTemplateFile){
  31. $this->mSmarty->display('application/view/'.$pTemplateFile);
  32. }
  33. }


Klasa Controller:
  1. abstract class Controller {
  2. private $mView = null;
  3.  
  4. public function setView($pView){ $this->mView = $pView; }
  5. public function getView(){ return $this->mView; }
  6. }


Klasa Index:
  1. class Index extends Controller {
  2. public function index(){
  3. $this->getView()->assign('name', 'value');
  4. }
  5. }


I teraz wywołanie:
  1. include_once('system/core/Config.php');
  2. include_once('system/core/View.php');
  3.  
  4. $config = new Config();
  5. $view = new View($config);
  6.  
  7. $index = new Index();
  8. $index->setView($view);
  9.  
  10. $index->index();

Otrzymuje błąd: Fatal error: Call to a member function assign() on a non-object in D:\EasyPHP-12.1\www\falcon\application\controller\index.php on line 12
Czyli zmienna jest nie jest obiektem ?
Ta linia to: $this->getView()->assign('name', 'value');
Jeżeli użyje funkcji var_dump to wyświetla się NULL, a następnie info o obiekcie jakby istniał :/
Pierwszy raz pisze w PHP obiektowo zazwyczaj piszę w JAVA i C# więc może coś robię tak ?

Poproszę o jakieś rady smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
b4rt3kk
post 4.10.2012, 23:29:37
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Funkcja:

  1. public function getView(){ return $this->mView; }


jak sam widzisz zwraca tylko wartość mView.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
sannin
post 5.10.2012, 08:59:40
Post #3





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


No ok,
ale czy to nie jest referencja do obiektu ?

Kontroler wygląda tak:
  1. abstract class Controller {
  2. private $mView = null;
  3.  
  4. public function setView($pView){ $this->mView = $pView; }
  5. public function getView(){ return $this->mView; }
  6. }


A następnie działamy:
  1. $view = new View($config);
  2.  
  3. $index = new Index();
  4. $index->setView($view);


Więc jak na moje oko powinna zwracać ref do obiektu.
Go to the top of the page
+Quote Post
rocktech.pl
post 5.10.2012, 09:19:41
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Witam.

Sprawa wygląd tak.

  1. class Index extends Controller {
  2. /**
  3.   * Metoda staje się konstruktorem tej klasy bo ma tą samą nazwę co klasa
  4.   * Zmień nazwę na np. renderIndex() i będzie ok ew. przekaż obiekt w konstruktorze po małej reorganizacji :)
  5.   */
  6. public function index(){
  7.  
  8. $this->getView()->assign('name', 'value');
  9.  
  10. }
  11.  
  12. }


Na przykładzie:

  1. //Tworzysz obiekt i wywołujesz konstruktor index()
  2. $index = new Index();
  3. //Tu dopiero setujesz widok
  4. $index->setView($view);
  5. //Tu widok już jest
  6. $index->index();


2 .Masz literówkę w metodzie assign

  1. public function assign($pKay, $pValue){ //powinno bć $pKey
  2.  
  3. $this->mSmarty->assign($pKey, $pValue);
  4.  
  5. }


Ten post edytował rocktech.pl 5.10.2012, 09:32:41


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
sannin
post 5.10.2012, 09:50:12
Post #5





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


O to właśnie chodziło, myślałem, że w PHP jedynie __construct jest konstruktorem.
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: 14.08.2025 - 03:23