PHP:如何处理全局范围

时间:2013-07-29 09:30:30

标签: php scope

我有使用Perl,Python和Javascript编程的经验,但最近继承了一个看起来像很多意大利面条代码的PHP项目。

我正在尝试重构项目,以便在单元测试下正确完成。对我来说,这意味着查看源代码并将所有内容分解为不使用全局变量且每个执行一个特定任务的小函数。

我知道PHP的模块系统有点像Javascript:所有源文件在include上连接成一个。

这意味着两个单独文件中的函数不能具有相同的名称,假设其中一个文件将使用另一个文件。

我的问题是:如何在PHP中定义我的函数来处理这个全局范围问题?

在Javascript中,我会像这样使用模块模式:

var MyModule = (function () {
                  return {
                      'func1': function () {},
                      'func2': function () {}
                  };
                }());

或者其中的一些变化。 有没有办法在PHP中执行此操作?此外,对此有哪些适当的约定?

3 个答案:

答案 0 :(得分:3)

我认为你有三种选择:

  • 使用类来捆绑函数
  • 使用namespaces
  • 同时使用

如果你想坚持使用函数(更容易重写),只需使用命名空间就可以了。

答案 1 :(得分:2)

在PHP中,您使用namespaces来避免这样的冲突。

答案 2 :(得分:0)

除了使用下面建议的名称空间。你也可以完成你用javascript做的事情

$module = function () {
                  return array(
                      'func1' => function () {},
                      'func2' => function () {}
                  );
                };