在PHP中包装匿名函数中的变量

时间:2013-02-13 04:08:04

标签: php javascript scope anonymous-function

我是一名JS开发人员,并经常使用自动执行的匿名函数来最大限度地减少对全球范围的污染。

即:(JS)

(function(){
    var x = ...
})(); 

PHP中可行/可行的相同技术是否可以最小化函数/变量名称冲突?

ie:(PHP)

(function(){

    $x = 2;

    function loop($a){
        ...
    }

    loop($x);

})();

2 个答案:

答案 0 :(得分:3)

为避免全球污染,请使用类和面向对象的方法: See PHP docs here

为了进一步避免污染,请避免使用静态和全局变量。

您在Javascript中使用的闭包是因为它(Javascript)是基于原型的语言,具有通常以基于OO的语言显示的属性(在形成意义上)。

答案 1 :(得分:1)

是的,您可以在PHP中创建立即执行的匿名函数,而不会污染全局名称空间;

call_user_func(function() {
  $a = 'hi';
  echo $a;
});

语法不如Javascript等效,但它完成相同的工作。我发现这个构造非常有用并经常使用它。

您也可以返回这样的值;

$str = call_user_func(function() {
  $a = 'foo';
  return $a;
});

echo($str);   // foo
echo($a);     // Causes 'Undefined variable' error.