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