This is the future home of my php general optimization guide
Use live and social bookmarks to keep track of this site.
All tests run using php version 5.2.4
eval vs call func
				eval:493.32308769226
				call_user_func:151.40509605408
				call with array:215.23499488831//slower to pass array as param
				call direct:72.86810874939
				
the code used to generate this test
user_data::friends();//make sure class is loaded (misc function)
//eval compared to call_user_func
$t0 = microtime(true);
for($i=0;$i<100000;$i++){
	call_user_func(array('user_data','friends'));
}
$ms0 = (microtime(true)-$t0)*1000;
$t1 = microtime(true);
for($i=0;$i<100000;$i++){
	call_user_func('user_data::friends');
}
$ms1 = (microtime(true)-$t1)*1000;
$t2 = microtime(true);
for($i=0;$i<100000;$i++){
	eval('user_data::friends();');
}
$ms2 = (microtime(true)-$t2)*1000;
$t3 = microtime(true);
for($i=0;$i<100000;$i++){
	user_data::friends();
}
$ms3 = (microtime(true)-$t3)*1000;
exit('eval:'.$ms2.'
call_user_func:'.$ms1.'
call with array:'.$ms0.'
call direct:'.$ms3);
to verify a character
				strpos: 166.40710830688
				in_array: 358.41298103333
				isset: 33.149003982544
				array_key_exists: 88.949918746948
				
the code used to generate this test
$letters = 'abcdefghijklmnopqurstuvwxyz';
$letter_array = str_split($letters,1);
$letter_assoc = array_flip($letter_array);
$t1 = microtime(true);
for($i=0;$i<=10000;$i++){
	foreach($letter_array as $l){
		if(strpos($letters,$l)!==false){
			
		}
	}
}
$ms1 = (microtime(true)-$t1)*1000;
$t2 = microtime(true);
for($i=0;$i<=10000;$i++){
	foreach($letter_array as $l){
		if(in_array($l,$letter_array)){
			
		}
	}
}

$ms2 = (microtime(true)-$t2)*1000;
$t3 = microtime(true);
for($i=0;$i<=10000;$i++){
	foreach($letter_array as $l){
		if(isset($letter_array[$l])){
			
		}
	}
}
$ms3 = (microtime(true)-$t3)*1000;
$t4 = microtime(true);
for($i=0;$i<=10000;$i++){
	foreach($letter_array as $l){
		if(array_key_exists($l,$letter_array)){
			
		}
	}
}
$ms4 = (microtime(true)-$t4)*1000;
echo "strpos: $ms1
"; echo "in_array: $ms2
"; echo "isset: $ms3
"; echo "array_key_exists: $ms4
";
Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 United States License.