【问题标题】:where to store helper functions?在哪里存储辅助函数?
【发布时间】:2010-04-27 00:03:29
【问题描述】:

我有很多我从网络上创建或复制的功能。

我想知道我是否应该将它们存储在我刚刚包含在脚本中的文件中,还是应该将每个函数作为静态方法存储在一个类中。

例如。我有一个 getCurrentFolder() 和一个 isFilePhp() 函数。

它们应该按原样存储在一个文件中,还是应该存储在一个类中:

文件夹::getCurrent() 文件::isPhp();

你好吗?

我知道这是一个“如你所愿”的问题,但如果有一些建议/最佳做法会很棒

谢谢。

【问题讨论】:

    标签: php oop organization code-organization


    【解决方案1】:

    你说得对,这是非常主观的事情,但我可能会混合使用你的两个选项。

    你有一个类(比如 Helper),它有 __call()(和/或 __callStatic(),如果你使用 PHP 5.3+)magic methods,当调用未定义的 [静态] 方法时,它会加载相应的帮助文件并执行帮助函数。请记住,虽然包含文件会降低性能,但我相信您在文件组织方面获得的好处远远超过对性能的微小影响。

    一个简单的例子:

    class helper {
        function __callStatic($m, $args) {
            if (is_file('./helpers/' . $m . '.php')) {
                include_once('./helpers/' . $m . '.php');
                return call_user_func_array($m, $args);
            }
        }
    }
    
    helper::isFilePhp(/*...*/); // ./helpers/isFilePhp.php
    helper::getCurrentFolder(/*...*/); // ./helpers/getCurrentFolder.php
    

    你可以进一步优化这个sn-p,甚至有几种类型的助手(文件夹,文件)等等,通过为你的每个类添加一个__call[Static]()魔术方法并在文件夹/文件结构中实现一些逻辑您的帮助文件/功能。

    【讨论】: