【问题标题】:Wrapping variables in anonymous functions in PHP在 PHP 中的匿名函数中包装变量
【发布时间】:2013-02-13 04:08:04
【问题描述】:

我是一名 JS 开发人员,经常使用自执行匿名函数来尽量减少对全局范围的污染。

即:(JS)

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

在 PHP 中是否可以/建议使用相同的技术来最大程度地减少函数/变量名称冲突?

即:(PHP)

(function(){

    $x = 2;

    function loop($a){
        ...
    }

    loop($x);

})();

【问题讨论】:

  • 不完全是,但在 PHP 中你可以使用命名空间来避免“全局”。
  • 或者换句话说,由于命名空间关键字,它不是必需的
  • 嗯,有趣的解决方案。如何从全局范围切换到命名空间并再次切换回来?
  • 是的,您可以拥有在 PHP 中立即执行的匿名函数。我在下面的回答中给出了一个例子。

标签: php javascript scope anonymous-function


【解决方案1】:

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

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

像您所展示的那样在 Javascript 中使用的闭包是因为它 (Javascript) 是一种基于原型的语言,通常在基于 OO 的语言中没有属性(在形成意义上)。

【讨论】:

    【解决方案2】:

    是的,您可以在 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.
    

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2014-09-12
      • 2017-05-27
      相关资源
      最近更新 更多