PHP:Proceedural代码-使用名称空间或闭包数组来避免污染全局名称空间



我刚刚开始编写一个开源软件,它是作为OOP mvc骨架/框架的替代品按程序编写的。因此,虽然我可以编写自己的OOPMVC框架,但其目的是按程序进行。这是为了学习,也是为了在做新项目时准备好自己动手做的代码库。我还没有完全精通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; }

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

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

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

最新更新