将类作为方法集合而没有属性是否可以?

Old*_*her 7 php oop namespaces code-organization libraries

我正在编写一堆通用但相关的函数供不同的对象使用.我想对这些函数进行分组,但我不确定是否应该将它们放在一个类或简单的平面库文件中.

像类一样对待它们似乎并不正确,因为没有一种对象可以使用它们,并且包含所有这些函数的类可能不一定具有任何属性.

将它们视为平面库文件似乎过于简单,因为缺少更好的单词.

这是什么最好的做法?

Chr*_*ker 6

检查名称空间:

http://www.php.net/manual/en/language.namespaces.rationale.php

将它们包装在无用的类中是命名空间概念的变通方法实现.此概念允许您避免与大型项目或插件/模块类型部署中的其他功能发生冲突.

编辑

坚持使用PHP 5.2?

使用单独的文件来组织实用程序功能没有任何问题.请务必使用注释记录它们,这样您就不会bunchafunctions.php得到20,000个可疑目的的程序代码文件.

前缀也没有错.使用前缀是组织类似目的函数的另一种方法,但一定要避免使用该语言已经保留的这些"伪命名空间".具体来说,PHP [ reference ]将"__"保留为前缀.要特别小心,function_exists如果您担心来自其他库的冲突函数,您还可以将函数声明包装在支票中:

if (!function_exists('myFunction')) {
    function myFunction() {
            //code
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以重新考虑对象结构,也许这些实用程序函数更适合作为基类中所有其他对象都可以扩展的方法.看一下继承:http://www.php.net/manual/en/language.oop5.inheritance.php.基类模式是一个常见且非常有用的模式:

abstract class baseObject {
    protected function doSomething () {
        print 'foo bar';
    }
    public function getSomething () {
        return 'bar foo';
    }
}

class foo extends baseObject {
    public function bar () {
        $this->doSomething();
    }
}

$myObject = new foo();
$myObject->bar();
echo $myObject->getSomething();
Run Code Online (Sandbox Code Playgroud)

您可以在此处试验上述代码:http://codepad.org/neRtgkcQ