Autor Zpráva
Jack06
Profil
dobrý den, řeším problém, ale nevím zda je řešitelnej. Nejdříve napíšu ukázku aby bylo vidět co myslím:
class testMe{

    public function _go_done( $options ){
        $array = Array ('_tree_fnc' => false, 'make_print' => false);
        $this->opt = array_merge($array, $options);
                  switch ($this->opt['_tree_fnc']){
                      case "_main_tree" : self::_main_tree();  break; // predani admina
                      case "_sub_tree": self:: _sub_tree(); break; // vezme uzivatele zpet
                  default:  self::_error('no_exist');break;
                  }
    }
    
    private function _main_tree(){
    
      self::$this->opt['make_print']('Hlavní Strom');
    }

    private function _sub_tree(){
    
      self::$this->opt['make_print']('Sub Strom');
    }
    
    private function show_a($txt){
    
     print "Výpis typu A, datasegment: $txt";
    }
    
     private function show_b($txt){

     print "Výpis typu B, datasegment: $txt";    
    }
}

$test =  new testMe;
$test->_go_done(array('_tree_fnc' => '_main_tree', 'make_print' => 'show_b'));
$test->_go_done(array('_tree_fnc' => '_sub_tree', 'make_print' => 'show_a'));


Bohužel toto mi vypíše

Fatal error: Call to undefined function show_b() in C:\Program Files\VertrigoServ\www\test\tst.php on line 16


Dá se to nějak sepsat aby to nějak takto šlo? Děkuji
fos4
Profil
Pokud jedes pres instance, ted $test = new testme tak nechapu proc v motedach pouzivas self:: ktery se pouziva pro staticke tridy. Normalne tam hod $this->{$this->opt['make_print']})('Substromg') nebo
call_user_func_array(array($this, $this->opt['make_print']), array("subStrom");
Majkl578
Profil
Rozhodně je tam několik věcí špatně, jak logicky, tak fakticky.

1. self::$this, tohle vidím prvně v životě a popravdě se divím, že to vůbec funguje. Je to více než podivná konstrukce...
2. Na řádcích 15 a 20 (tvůj problém) voláš $this->opt['make_print'], což vrátí název funkce v globálním kontextu, ne objektovém. Řešením je toto: $this->{$this->opt['make_print']}(..);, ikdyž není moc pěkné, spíš bych zvážil jinou konstrukci...
3. Obecně se v současnosti k oddělování většinou nepoužívají podtržítka, ale camelCase zápis.
4. Na řádcích 7 a 8 je záludnost - voláš nestatickou metodu staticky. To jakousi záhadou nehodí chybu, ale metoda by i tak měla být označena jako static (z logického hlediska).
Jack06
Profil
Díky moc.. já jsem to vyřešil už trochu jinak jen mě zajímalo, zda to jde nějak takto udělat.

Jde mi o to že volám třídu na výpis dat z databáze a rozděluji funkce na:

získání dat ( výstup ){
data
funkce pro prezentaci dat();
}

Prostě dejmetomu mám jednu funkci na výběr dat a pak jsem si potřeboval vybrat, zda ty data chci do seznamu, tabulky, selectu atd

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: