Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak sprawdzić, czy da się wykonać funkcję wewnątrz klasy
Asmox
post 22.06.2009, 14:21:55
Post #1





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


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)


--------------------
Go to the top of the page
+Quote Post
erix
post 22.06.2009, 14:56:56
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Asmox
post 22.06.2009, 16:11:17
Post #3





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


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.

Ten post edytował Asmox 22.06.2009, 16:17:51


--------------------
Go to the top of the page
+Quote Post
Crozin
post 22.06.2009, 16:17:03
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
Pr0100
post 22.06.2009, 18:35:47
Post #5





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


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


Ten post edytował Pr0100 22.06.2009, 18:37:35


--------------------
Go to the top of the page
+Quote Post
Cysiaczek
post 22.06.2009, 23:07:42
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Żadna to obiektówka, php - przenoszę


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
em1X
post 23.06.2009, 10:24:59
Post #7





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


  1. <?php
  2. if(is_callable(array($this, 'Action'.$this->action)))
  3. ?>


zmień książkę lepiej withstupidsmiley.gif


--------------------
eh, co polska wódka to polska wódka
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: 14.08.2025 - 07:57