Jump to content
php.lv forumi

eval


EdgarsK

Recommended Posts

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

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

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 by EdgarsA
Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

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

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

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 by EdgarsA
Link to comment
Share on other sites

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...