Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie obiektu poprzez podanie nazwy klasy w zmiennej string
Forum PHP.pl > Forum > PHP > Object-oriented programming
Pronigo
Witam,
mam taki kodzik:

  1. <?php
  2. include 'system/libraries/actionController.class.php';
  3. include 'application/controllers/'.$_GET['module'].'ActionController.class.php';
  4.  
  5. $class = $_GET['module'] . 'ActionController';
  6.  
  7. $controller = new $class;
  8. $controller->indexAction();
  9. ?>


Chyba wiecie o co mi chodzi. Chcę zrobić w przerobić swój framework na wzorcu MVC, ale nie wiem jak wybierać odpowiednią klasę i funkcję przez dane przekazane w zmiennej $_GET['module']. Ten kto zna popularne frameworki na pewno zrozumie o co mi chodzi smile.gif

Dzięki
destroyerr
Sposób jest poprawny, masz jakiś problem? Wywala Ci błąd? Może wielkość liter jest tego przyczyną. Niestety ale zgaduję, podaj więcej informacji winksmiley.jpg
LBO
W dobrze napisanych frameworkach ten proces dzieli się na co najmniej 2 obiekty ściśle, ze sobą współpracujące: Router i Dispatcher.

Router pobiera dane z URL (a nawet z konsoli, zależy jak to napiszesz), a następnie po walidacji i dopasowaniu zmiennych, do dispatchera, który to wywołuje odpowiednią klasę kontrolera/akcji.

Cytat(destroyerr @ 24.05.2008, 23:21:05 ) *
Sposób jest poprawny, masz jakiś problem? Wywala Ci błąd? Może wielkość liter jest tego przyczyną. Niestety ale zgaduję, podaj więcej informacji winksmiley.jpg


no proszę Ciebie, a gdzie walidacja, a gdzie obsługa niepoprawnych linków (kontroler/akcja nie istnieje)
destroyerr
Cytat
no proszę Ciebie, a gdzie walidacja, a gdzie obsługa niepoprawnych linków (kontroler/akcja nie istnieje)

To ja Ciebie prosze, spójrz na temat. Co innego jeśli chodzi o wybranie akcji, ale moja wypowiedź tego nie dotyczyła.
Landon
a może by tak poczytać inne tematy np:

  1. <?
  2. class Kernel {
  3.  
  4. public $classList = array();
  5. public $dir;
  6.  
  7. public function __construct($dir = './') {
  8. if (!$this -> classList['Karnel']) {
  9. $this -> dir = $dir;
  10. $this -> classList['Karnel'] = true;
  11. }
  12. }
  13.  
  14. public function __call($method, $args) {
  15. return Debug::error('Nie istnieje funckja '.$method, 'Karnel');
  16. }
  17.  
  18. public function load($className, $parametr = false, $new = false) {
  19. if (!in_array($className, $this -> classList, true)) {
  20. if (file_exists($this -> dir.'class/'.$className.'.class.php')) 
  21. require_once('class/'.$className.'.class.php');
  22. elseif (file_exists($this -> dir.'lib/'.$className.'/'.$className.'.class.php')) 
  23. require_once('lib/'.$className.'/'.$className.'.class.php');
  24. else return Debug::error('Nie ma takiej biblioteki', 'Karnel');
  25. // tu dajesz swoje katalogi zamiast moich
  26. if ($new) $this -> classList[$className] = ($parametr) ? new $className($parametr) : new $className;
  27. else $this -> classList[$className] = true;
  28. return $this -> classList[$className];
  29. } else return Debug::error('2 deklaracja tej samej biblioteki', 'Karnel');
  30. }
  31.  
  32. }
  33. ?>
Sedziwoj
@Landon
Jakbym miał przeanalizować co robi metoda load() to już bym wolał sam to napisać... Jak ja nie lubię takiego syfu, który nie da się normalnie czytać.
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.