你们都如何组织随机函数以改进 OOP 类(全局函数)之外的语言功能?
我见过图书馆,但我仍然不相信这是一个好的解决方案,特别是如果你没有足够的功能。我对人们如何组织随机 PHP 和 JavaScript 函数特别感兴趣。
你们都如何组织随机函数以改进 OOP 类(全局函数)之外的语言功能?
我见过图书馆,但我仍然不相信这是一个好的解决方案,特别是如果你没有足够的功能。我对人们如何组织随机 PHP 和 JavaScript 函数特别感兴趣。
我尽量避免在全局命名空间中声明函数。我这样做的极少数情况是,例如添加不在我的 PHP 版本中的函数的用户态实现时
if(false === function_exists('lcfirst'))
{
function lcfirst( $str ) { /* ... */}
}
像这样的函数可以放在将包含在引导文件中的 compatibility.php 中,因此它们在整个应用程序中都可用,并且function_exists
一旦 PHP 版本具有对该函数的本机支持,检查以确保我不会遇到问题。
对于所有其他功能,我会尝试查看它们是否不能先进入专用对象。通常,“随机”函数只是放错了位置。看看哪些对象使用了您的实用程序函数,然后看看您是否可以将这些方法移到那里。也许有一个超类等着出来。另请参阅信息专家模式。
如果没有这些方法可以继续使用的对象,您仍然可以将它们分组在一个名为 Utils 的静态模块中,并放在一个唯一的命名空间中,这样它们就不会弄乱全局命名空间。这样,您可以确保不会与全局范围内的其他第三方函数发生冲突。
在 5.3 之前,我会按照 PEAR 命名约定对它们进行分组,并按照您的文件夹结构为类名添加前缀,例如,如果模块位于 中com/mattmueller/utils.php
,您将使用
class Com_MattMueller_Utils
{
public static function something($a, $b) { /* ... */ }
}
从 PHP5.3 开始,我们有了真正的命名空间,你可以这样做
namespace com\mattmueller\Utils;
class Utils
{
public static function something($a, $b) { /* ... */ }
}
在 Javascript 中,您没有命名空间,但可以通过将函数添加到对象来轻松模拟它们,例如
// JavaScript
var com = (com) ? com : {};
com.mattmueller = {
'Utils': {
'something' : function(a,b) { /* ... */ }
}
};
通用框架通常也实现创建命名空间的功能。
我通常会保留一个functions.php
或common.php
所有奇怪的函数,这些函数最初应该在 PHP 中使用。(意思是,完全不特定于我的项目)。
这可以类似于将标准函数扩展到多维数组,或者其他适合该类别的东西。
当我更改项目时,我只需将该文件复制到下一个项目,它就可以轻松地随身携带。然后我只是确保它已加载到我的加载脚本中,并且我已经成功地扩展了语言。
对于项目特定的事情,我保留了一个Misc
包含非常奇怪的函数调用的类,这些函数调用同时也是项目特定的。
对于 Javascript 函数,我可以想象同样的事情可以适用。如果您想创建一个functions.js
或global.js
类型文件,您可能会使用相同的逻辑。
我总是使用一个帮助类,我可以在其中放置我所有的非 OOP 代码,哈哈。我的意思是助手仍然是 OO 并且有方法而不是函数,其优点是您可以在不同的助手中组织您的函数。像 StringHelper、DBHelper 等。
对于 Javascript,我发现首选应该是将我的实用程序集成到 jQuery 中。它就像编写任何其他类型的函数一样简单,当事情变得更加复杂时,能够利用 jQuery 对所有内容(以及我在站点中所有其他特定于页面的代码)施加的范式非常好。
在 JavaScript 中,创建一个新文件并将它们分组到一个对象下
global.js
:
/* Function definitions */
var myFunctions = new Object();
myFunctions.func = function () {
alert("hello");
}
同样的想法也可以用于 PHP。有了这个,当你的程序变大时,你不必担心命名约定的冲突。