PHP:程序代码 - 使用命名空间或闭包数组来避免污染全局命名空间?

时间:2015-12-05 00:39:27

标签: php namespaces closures procedural

我刚刚开始编写一个开源软件,它是程序性编写的,作为OOP mvc骨架/框架的替代品。因此,虽然我可以编写自己的OOP MVC框架,但预期目的是在程序上完成所有操作。这是出于学习目的,并且为了在进行新项目时准备好DIY代码库。我还没有完全了解OOP,所以我觉得这样做是朝这个方向迈出的一步。但是,这个项目的目的是成为一个程序选择,所以它必须是程序性的(并且我给出了这个序言以避免使用OOP的答案)。

在开始编写之后,我意识到代码正在污染全局命名空间(就像程序代码一样)。

首先,为了解决污染全局命名空间和最小化意外命名冲突的问题,我决定使用这样的变量和函数作为前缀:

$prefix_variableName = 'value'; prefix_functionName($var){ return $var; }

然后我意识到有更好的方法来做到这一点。我有两个想法:

1:创建一个全局闭包数组。这样我在代码中设置的唯一全局是单个数组..就像这样......

$myApp = array(
    'var1' => 'value1',
    'var2' => 'value2',
    'function1' => function($var1){ return $var1; },
    'function2' => function($var2){ return $var2; }
//etc
);

2:为每个文件顶部的全局代码创建一个名称空间..比如..

namespace myApp;

$var1 = 'value1';
function1($msg){ return $msg; }

这两种选择都是可能的吗?程序代码可以命名空间吗?对于这种情况,哪一个是更好的选择,为什么?还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

您当然可以将命名空间用于过程代码。检查文档以了解其工作原理:http://php.net/manual/en/language.namespaces.basics.php

您应该始终命名代码以防止冲突。使用闭包数组可能会产生不必要的行为,例如让用户能够取消设置全局数组中的值以及期望出现可调用错误的代码。