关于“随机效用函数”的优雅实践

时间:2010-02-07 01:51:24

标签: php javascript organization

你们如何组织随机函数来改进OOP类之外的语言功能(全局函数)?

我见过图书馆,但我仍然没有出售这是一个很好的解决方案,特别是如果你没有足够的功能。我特别感兴趣的是人们如何组织随机的PHP和JavaScript函数。

5 个答案:

答案 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.phpcommon.php,这些函数最初应该是PHP中的理想选择。 (意思是,对我的项目没有任何特殊性)。

这可能类似于将标准函数扩展到多维数组,或者适合该类别的其他内容。

当我更改项目时,我只是将该文件复制到下一个项目中,无论在哪里,它都可以轻松地与我同行。然后我只是确保它已加载到我的加载脚本中,并且我已成功扩展了该语言。


对于项目特定的东西,我保留一个Misc类,其中包含非常奇怪的函数调用,同时特定于项目。


对于Javascript函数,我可以想象同样的事情可以应用。如果要创建functions.jsglobal.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。这样,当程序变大时,您无需担心命名约定中的冲突。