条件付き関数の定義を行うことができます。
if( !function_exists('baz') )
{
function baz( $args ){
echo $args;
}
}
しかし現在、関数は定義されるとブリックになります。
を使用することはできますが、低速であり、大量のメモリを使用し、php が終了するまで free() が取得されず、eval() と同じくらい大きなセキュリティ ホールであるため、使用しないことcreate_function
をお勧めします。
「クロージャー」がある 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
}
ただし、それはできないかもしれませんが、明確にするのに十分な範囲が与えられていません。ただし、それができる場合は、簡単な答えが最善の場合がよくあります:)