Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Front Controller
weogrim
post 9.06.2010, 22:43:48
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 23.08.2008

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


Witam.

Próbuję właśnie pierwszy raz napisać coś większego w programowaniu obiektowym. Zacząłem sobie od Front Controllera (niezbyt wyrafinowanego, ale jednak tongue.gif), i już napotkałem problem.

Controller ma działać na zasadzie pobrania z adresu nazwy klasy i metody. Czyli w http://domena.pl/news/show news będzie klasą, a show metodą. Mam taki kod:

  1. <?php
  2.  
  3. /**
  4.  * @author weogrim
  5.  * @copyright 2010
  6.  */
  7.  
  8. class FrontController {
  9. private $address;
  10. public $param;
  11.  
  12. function __construct() {
  13. $this->address = $_SERVER['REQUEST_URI'];
  14. }
  15.  
  16. function PrepareUrl() {
  17. $this->param = explode("/", $this->address);
  18. }
  19.  
  20. function SetClass() {
  21. include "class/".$this->param[2].".class.php";
  22. $this->param[2] = new $this->param[2];
  23. if(!empty($this->param[3])) {
  24. $this->param[2]->$this->param['3']();
  25. }
  26. }
  27.  
  28. }
  29.  
  30. ?>


Problem mam w funkcji SetClass. Poprawnie includuje mi plik i wywołuje klasę, ale to: $this->param[2]->$this->param['3']();, co jest chyba totalnie bez sensu, ale pisałem na pałę, bo nie wiedziałem co zrobić, wywołuje taki błąd:
  1. Catchable fatal error: Object of class FrontController could not be converted to string in E:\Programy\WebServ\httpd\a24cms\class\FrontController.class.php on line 24


Zakładając, że $this->param[2] to klasa news, a $this->param[3] to metoda show, to jak za pomocą tego mam uzyskać:
  1. $news->show();


Z góry dziękuję za pomoc.

PS. Wahałem się między działem Przedszkole, a programowanie obiektowe. Mam nadzieje że dobrze wybrałem haha.gif.
Go to the top of the page
+Quote Post
-=Peter=-
post 9.06.2010, 22:58:17
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Wybrałeś nie najlepiej, bo Twój problem ma się ni jak do oop. Tutaj raczej kłaniają się podstawy php.

  1. //24 linijka - tak powinno być
  2. $this->param[2]->{$this->param['3']}();


Ten post edytował -=Peter=- 9.06.2010, 22:59:00


--------------------
Go to the top of the page
+Quote Post
weogrim
post 10.06.2010, 15:56:22
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 23.08.2008

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


Dziękuję za pomoc, wszystko już działa.
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: 11.06.2024 - 14:49