Autor Zpráva
Fuckin
Profil *
Hledam ale jaksi sem zatim nikde toto nenasel, lze nejakou funkci zjistit jaka je nastavena viditelnost u dane metody v uvedene tride?
Jde o to ze instance a metody spoustim pres $_GET a potrebuju zajistit aby se spoustely pouze metody public...jinak to stejne vyhodi error, a tomu prave chcu zabranit....nejake napady?
Mastodont
Profil
Ano, jde to:
http://cz.php.net/manual/en/language.oop5.reflection.php#language.oop5.reflection.reflectionmethod
Fuckin
Profil *
Diky, jeste jsem to nejak moc nestudoval, ale moc me to neprijde jako jednoduche reseni...
AM_
Profil
No ono to co se snažíš udělat není zrovna standardní věc, já bych to řešil spíš nějak takhle:
class callableFromGet{
  private function echoAhoj(){
    echo 'ahoj';
  }
  public function echoNazdar(){
    echo 'nazdar';
  }
  public function echoCau(){
    echo 'cau';
  }
  public function _callMethod($method){
    switch ($method){
      case 'echoNazdar': $this->echoNazdar();break;
      case 'echoCau': $this->echoCau();break;
      default: throw new Exception('metoda neexistuje nebo k ni nemate pristup');
    }
  }
}

Není to sice tak plně automatické, jako přes reflection, ale podle mě je to i lepší - co když nastane situace, kdy budeš potřebovat public metodu, kterou ale bude volat jen skript, ale ne uživatel?
Fuckin
Profil *
Kdyz to nevola uzivatel tak nechapu proc by tam nemohlo byt private...to nemuze volat skript ?

Ono toto reseni me taky napadlo ale je to dosti neprakticke uz z toho duvodu ze budu muset vsechny metody ktere chci spoustet dopisovat rucne atd, chci mit kod dobre optimalizovany, uz z toho duvodu ze to je rozsahly projekt, opravdu neni jine reseni?
AM_
Profil
Kdyz to nevola uzivatel tak nechapu proc by tam nemohlo byt private...to nemuze volat skript ?
private znamená viditelnost pouze z dané třídy, čili ve zbylých částech skriptu skutečně ne. To je rozdíl mezi public a private, volání skrz _GET požadavek nemá s viditelností nic co dočinění (stejně to nakonec volá skript a vybírá metodu na základě GET parametru). Osobně si myslím, že volat metody takhle není moc chytrý nápad (uživatel by se neměl dostávat tak blízko kódu), docela by mě zajímalo, k čemu to je... pokud to není něco jako "online tester objektů", vykašlal bych se na tenhle koncept úplně a řešil problém nějakou schůdnější cestou (jeden switch pokrývající všechny akce považuji za schůdnější cestu).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0