Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Front Controller
Forum PHP.pl > Forum > PHP
weogrim
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.
-=Peter=-
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']}();
weogrim
Dziękuję za pomoc, wszystko już działa.
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.