Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak sprawdzić, czy da się wykonać funkcję wewnątrz klasy
Forum PHP.pl > Forum > PHP
Asmox
Robię sobie kontroler dla mojej strony, nie wiem czy dobrze, ale wygląda on tak:
  1. <?php
  2. class FrontController
  3. {
  4.  private $requests = array();
  5.  private $action;
  6.  private $action_parameters = array();
  7.  
  8.  private function __construct() {
  9.    GLOBAL $_GET;
  10.    GLOBAL $_POST;
  11.    $this->requests['get'] = $_GET;
  12.    $this->requests['post'] = $_POST;
  13.    $this->action = $this->requests['get']['ac'];
  14.    foreach($this->requests['get'] as $key => $val) {
  15.      if($key == "ac") continue;
  16.      $action_parameters[$key] = $val;
  17.    }
  18.  }
  19.  
  20.  static function GetInstance() {
  21.    static $controller;
  22.    
  23.    if(!isset($controller)) {
  24.      $controller = new FrontController();
  25.    }
  26.    return $controller;
  27.  }
  28.  
  29.  public function Dispatch() {
  30.    $funcName = '$this' . 'Action' . $this->action;
  31.    echo $funcName;
  32.    if(is_callable(array("$this", "Action{$this->action}")))
  33.    echo 'ok';
  34.  }
  35.  
  36.  public function Action00() {
  37.    echo "in action 00";
  38.  }
  39. }
  40. ?>

Nie wiem tylko jak sprawdzić, czy funkcję Action00 da się wykonać (patrz przedostatnia linijka funkcji Dispatch)
erix
  1. <?php
  2. GLOBAL $_GET;
  3.   GLOBAL $_POST;
  4. ?>

Może Ty najpierw opanuj PHP?

Poza tym, IMHO źle przekazujesz uchwyt klasy do is_callable" title="Zobacz w manualu PHP" target="_manual.
Asmox
Wiesz co to akurat z GLOBAL to był jeden z przykładów w książce, którą tak wszyscy wychwalają. Poza tym nie prosiłem o krytykę klasy FrontController, która już nie istnieje bo mam dosyć tego mvc, tylko jak sprawdzić wewnątrz klasy, czy da się wykonać jej funkcję, bo na tym mi zależy. No więc jak to zrobić?

@EDIT: Już problem rozwiązany, użyłem method_exists z nazwą klasy w której to robiłem.
Crozin
Jaka to książka? Bo takich głupot (fragment cytowany przez erixa) to już dawno nie widziałem biggrin.gif

A co do problemu: masz Reflection API, a dokładniej to ReflectionClass - skorzystaj z tego.
Pr0100
  1. <?php
  2. foreach($this->requests['get'] as $key => $val) {
  3.  if($key == "ac") continue;
  4.  $action_parameters[$key] = $val;
  5. }
  6. ?>


robisz pętle po to aby usunąć element tablic? Ciekawy pomysł ale chyba trochę mało wydajny... O tym też czytałeś w tej książce? smile.gif

  1. <?php
  2. $action_parameters = $this->requests['get'];
  3.  
  4. if (key_exists("ac", $action_parameters))
  5. {
  6.  unset($action_parameters["ac"]);
  7. }
  8. ?>
Cysiaczek
Żadna to obiektówka, php - przenoszę
em1X
  1. <?php
  2. if(is_callable(array($this, 'Action'.$this->action)))
  3. ?>


zmień książkę lepiej withstupidsmiley.gif
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.