| Autor | Zpráva | ||
|---|---|---|---|
| Jack06 Profil |
#1 · Zasláno: 24. 11. 2009, 08:12:28
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 |
#2 · Zasláno: 24. 11. 2009, 08:33:52
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 |
#3 · Zasláno: 24. 11. 2009, 08:41:14
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 |
#4 · Zasláno: 24. 11. 2009, 10:05:59
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 |
||
|
Časová prodleva: 16 let
|
|||
0