在PHP中,将变量包装在匿名函数中

7
我是一名JS开发者,通常使用自执行匿名函数来最小化全局范围的污染。
例如:(JS)
(function(){
    var x = ...
})(); 

在PHP中,是否可以/建议使用相同的技术来最小化函数/变量名称的冲突?

即:(PHP)

(function(){

    $x = 2;

    function loop($a){
        ...
    }

    loop($x);

})();

3
不完全是这样,但在PHP中你可以使用命名空间来避免“全局”。 - Passerby
换句话说,由于命名空间关键字的存在,它并不是必需的。 - hek2mgl
嗯,有趣的解决方案。如何从全局范围切换到命名空间,再切回来呢? - JackMahoney
1
是的,您可以在PHP中使用立即执行的匿名函数。我在下面的答案中给出了一个示例。 - Nigel Alderton
2个回答

3
为避免全局污染,请使用类和面向对象的方法: 请参考 PHP 文档 为更好地避免污染,请避免静态和全局变量。
类似您展示的闭包在 JavaScript 中被使用,是因为它(JavaScript)是基于原型的语言,在形式上没有 OO 基础语言中通常显示的属性。

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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接