我刚刚开始编写一个开源软件,它是按程序编写的,作为 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; }
这两种选择都可以吗?程序代码可以命名空间吗?对于这种情况,哪一个是更好的选择,为什么?还有更多选择吗?
最佳答案
您当然可以为过程代码使用命名空间。查看文档以了解其工作原理:http://php.net/manual/en/language.namespaces.basics.php
您应该始终命名您的代码以防止冲突。使用闭包数组可能会产生不需要的行为,例如让用户能够取消设置全局数组中的值以及预期可调用错误的代码。
关于PHP:程序代码 - 使用命名空间或闭包数组来避免污染全局命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099835/