EdgarsK Posted March 2, 2010 Report Share Posted March 2, 2010 Sveiki, jautājums - vai ir vēl kāds labs un ātrs variants kas spētu pildīt eval funkcijas pienākumus ? Teiksim kods: <? $function = 'myFunc'; $class = 'myClass'; $attr = '"My Attr1","My Attr2","My Attr3"'; $obj = new $class(); eval('$class::$function('.$attr.');'); ?> jo man ir problēma ar $attr - lietotjot bez eval tas ir 1 strings, bet ar eval tie ir 3 stringi, tatad kads butu jusu variants (ne eval) Link to comment Share on other sites More sharing options...
Kaklz Posted March 2, 2010 Report Share Posted March 2, 2010 http://lv.php.net/call_user_func ? Link to comment Share on other sites More sharing options...
rATRIJS Posted March 2, 2010 Report Share Posted March 2, 2010 Ir taada lieta kaa call_user_func() un pie viena palasi par callback objektiem. Un vispaar - ar taadu informaaciju neko vairaak nevar ieteikt. Padomaa vai to visu nevar uzorganizeet skaistaak. Padomaa vai tev vajag statiskaas metodes (aka vai neizmanto klases tikai lai enkapsuleetu metodes - taadaa gadiijumaa vienkaarshi izmanto funckijas nevis klases). Es domaaju, ka, noteikti, to var uzstruktureet labaak. Un shis ir atljauts: $class = 'Class'; $method = 'method'; $class = new $class($shis_var_buut_konstruktora_variablis); $class->$method($var, $var, $var); Un veel shaadas, taadas interesantas lietas: http://uk3.php.net/manual/en/language.oop5.magic.php Link to comment Share on other sites More sharing options...
briedis Posted March 2, 2010 Report Share Posted March 2, 2010 Bez eval nevar iztikt? Teiksim, padot mainīgos kā masīvu, vai kā to pašu stringu, un funkcijā explodēt ar ","? Pameklējot netā, atradās šāda funkcija: http://www.php.net/manual/en/function.call-user-func.php Link to comment Share on other sites More sharing options...
EdgarsK Posted March 2, 2010 Author Report Share Posted March 2, 2010 (edited) briedi. - censos izveidot kko lidzigu shim domens.lv/att1/attr2/attr3/attr4/attr5 $path = array( 1=>'attr1',2=>'attr2',3=>'att3',4=>'attr4',5=>'attr5' ); class attr1{ function attr2($i='',$c='',$f=''){ ... } } $class = new attr1; $class->$attr2($attr3,$attr4,$attr5); tada veida iegustot to, ka varu veidot klases neveidojot katra funkcija explode(",".. paldies kaklz nebiju piefiksejis user funkciju Edited March 2, 2010 by EdgarsA Link to comment Share on other sites More sharing options...
briedis Posted March 2, 2010 Report Share Posted March 2, 2010 (edited) Tjipa kaut ko uz mvc pusi taisi? Es visdrīzāk izlobītu to kontrolieri, un metodi ko saukšu, (kotrolieris/metode/param1/param2/param3) un vienkārši padotu pārējos parametrus kā stringu metodei, lai tā pati no tā visa paņem nepieciešamos parametrus. Manuprāt, tā vairāk tiktu visa loģika sadalīta pa līmeņiem... Edited March 2, 2010 by briedis Link to comment Share on other sites More sharing options...
codez Posted March 2, 2010 Report Share Posted March 2, 2010 padot kā stringu var, tikai ir tāda problēma, ka praktiski visās funkcijās tas strings tiks vienādi dalīts daļās, tāpēc labāk ir to dalīšanu jau taisīt pirms, tāpēc Edgara doma ir pareiza, tikai derētu vēl izveidot kādu mehānismu pie reizes, kas uzreiz notestē padoto datu validitāti: parametru skaitu, tipus, utt. un neatbilstības gadījumā izdod erroru. Link to comment Share on other sites More sharing options...
rATRIJS Posted March 2, 2010 Report Share Posted March 2, 2010 Klase pati var paskatiities kas ir urlii, taadeelj padot tos atrubuutus ir lieki. Izveido kaut kaadu routing klasi, kura skatoties kas ir urlii pati izdomaa kaadu kontrolieri izsaukt. (url struktuuru definee lietotaajs, piemeeram) Link to comment Share on other sites More sharing options...
EdgarsK Posted March 2, 2010 Author Report Share Posted March 2, 2010 (edited) mans variants protected function lookup(){ $index_lookup = 1; $path1 = _Path::get(1); if($path1){ $path2 = _Path::get(2); if($path1 == 'start'){ $index_lookup=2; $obj = $path1; }else{ if(self::exists($path1)){ $index_lookup=2; $obj = $path1; }else{ $obj = 'start'; } } }else{ $obj = "start"; } self::$control = $obj; if(!self::startController()) _Manager::kill("Controller <b>{$obj}</b> not found"); $attr_lookup = $index_lookup+1; $index_lookup = _Path::get($index_lookup); if($index_lookup){ if(method_exists(self::$object,$index_lookup)){ $_index = $index_lookup; }else{ $attr_lookup--; $_index = "index"; } }else{ $attr_lookup--; $_index = "index"; } $_attributes = ''; if($attr_lookup<=_Path::cnt()){ for($i=$attr_lookup;$i<=_Path::cnt();$i++){ $_attributes .= ($_attributes?",":"").'"'._Path::get($i).'"'; } } self::$index = $_index; self::$attributes = $_attributes; self::ready(); } attiecigi .lv/kontrole/metode/p1/p2/3 = $kontrol->metode(p1,p2,p3); .lv/metode/p1/p2 = $kontroleStart->metode(p1,p2); .lv/p1/p2/p3 = $kontroleStart->metodeIndex(p1,p2,p3); Edited March 2, 2010 by EdgarsA Link to comment Share on other sites More sharing options...
EdgarsK Posted March 2, 2010 Author Report Share Posted March 2, 2010 bet mani nomoka jautajums, kuru tad es ludzu. tatad .lv/object/index/attr1/attr2 call_user_func(array(self::$object,self::$index,self::$attributes)); es iegustu Class Object { Function Index($attribute1='',$attribute2=''){ echo $attribute1."<br>".$attribute2; } } un echo sanemu "attr1","attr2" jeb tiem kas vēl nesaprata echo ' "attr1","attr2" <br> null '; Link to comment Share on other sites More sharing options...
codez Posted March 2, 2010 Report Share Posted March 2, 2010 call_user_func_array() Link to comment Share on other sites More sharing options...
EdgarsK Posted March 2, 2010 Author Report Share Posted March 2, 2010 mmm, paldies ;) Link to comment Share on other sites More sharing options...
Recommended Posts