你可以做条件函数定义。
if( !function_exists('baz') )
{
function baz( $args ){
echo $args;
}
}
但是目前,一个函数在定义时就变成了一块砖。
你可以使用create_function
,但我建议你不要,因为它很慢,使用大量内存,在 php 退出之前不会获得 free(),并且是一个与 eval() 一样大的安全漏洞。
等到 PHP5.3,我们有“闭包” http://wiki.php.net/rfc/closures
然后你将被允许做
if( !isset( $baz ) )
{
$baz = function( $args )
{
echo $args;
}
}
$baz('hello');
$baz = function( $args )
{
echo $args + "world";
}
$baz('hello');
进一步阅读,这就是你想要的效果。
$fname = 'f_first';
function f_first( $even )
{
global $fname;
doExpensiveStuff();
$fname = 'f_others';
$fname( $even );
/* code */
}
function f_others( $odd )
{
print "<b>".$odd."</b>";
}
foreach( $blah as $i=>$v )
{
$fname($v);
}
它会做你想做的事,但调用可能比普通函数调用贵一点。
在 PHP5.3 这也应该是有效的:
$func = function( $x ) use ( $func )
{
doexpensive();
$func = function( $y )
{
print "<b>".$y."</b>";
}
$func($x);
}
foreach( range(1..200) as $i=>$v )
{
$func( $v );
}
(就个人而言,我当然认为所有这些巧妙的技巧都会比你之前对 2 个正位的比较慢得多。;))
如果您真的担心在任何地方都能获得最佳速度
$data = // some array structure
doslowthing();
foreach( $data as $i => $v )
{
// code here
}
但是,您可能无法做到这一点,但是您没有给出足够的范围来澄清。但是,如果您能做到这一点,那么简单的答案通常是最好的:)