Вы можете сделать условное определение функции.
if( !function_exists('baz') )
{
function baz( $args ){
echo $args;
}
}
Но в настоящее время функция становится кирпичом, когда она определена.
Вы можете использовать create_function
, но я бы посоветовал вам DONT , потому что он медленный, использует много памяти, не освобождается () до выхода php и является дырой в безопасности такой же большой, как 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
}
Возможно, вы не сможете сделать это, но у вас недостаточно возможностей для разъяснения. Однако, если вы можете сделать это, тогда простые ответы часто являются лучшими:)