9

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

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

4

5 回答 5

7

我尽量避免在全局命名空间中声明函数。我这样做的极少数情况是,例如添加不在我的 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) { /* ... */ }
     }
};

通用框架通常也实现创建命​​名空间的功能。

于 2010-02-07T14:55:40.500 回答
4

我通常会保留一个functions.phpcommon.php所有奇怪的函数,这些函数最初应该在 PHP 中使用。(意思是,完全不特定于我的项目)。

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

当我更改项目时,我只需将该文件复制到下一个项目,它就可以轻松地随身携带。然后我只是确保它已加载到我的加载脚本中,并且我已经成功地扩展了语言。


对于项目特定的事情,我保留了一个Misc包含非常奇怪的函数调用的类,这些函数调用同时也是项目特定的。


对于 Javascript 函数,我可以想象同样的事情可以适用。如果您想创建一个functions.jsglobal.js类型文件,您可能会使用相同的逻辑。

于 2010-02-07T01:54:48.483 回答
2

我总是使用一个帮助类,我可以在其中放置我所有的非 OOP 代码,哈哈。我的意思是助手仍然是 OO 并且有方法而不是函数,其优点是您可以在不同的助手中组织您的函数。像 StringHelper、DBHelper 等。

于 2010-02-07T05:57:45.637 回答
1

对于 Javascript,我发现首选应该是将我的实用程序集成到 jQuery 中。它就像编写任何其他类型的函数一样简单,当事情变得更加复杂时,能够利用 jQuery 对所有内容(以及我在站点中所有其他特定于页面的代码)施加的范式非常好。

于 2010-02-07T02:13:10.440 回答
1

在 JavaScript 中,创建一个新文件并将它们分组到一个对象下

global.js

/* Function definitions */ 
var myFunctions = new Object();
myFunctions.func = function () {
   alert("hello"); 
}

同样的想法也可以用于 PHP。有了这个,当你的程序变大时,你不必担心命名约定的冲突。

于 2010-02-07T06:02:29.213 回答