Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Tworzenie obiektu poprzez podanie nazwy klasy w zmiennej string
Pronigo
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.05.2005
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dzięki

Ten post edytował Pronigo 24.05.2008, 22:15:43
Go to the top of the page
+Quote Post
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
LBO
post
Post #3





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


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

Ten post edytował LBO 24.05.2008, 22:32:09
Go to the top of the page
+Quote Post
destroyerr
post
Post #4





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


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.
Go to the top of the page
+Quote Post
Landon
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

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


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. ?>


Ten post edytował Landon 25.05.2008, 22:00:52
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@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ć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 00:45