函数与静态方法

Ema*_*sev 14 php

我有一些处理cookie的函数.通过将它们移动到自己的类并将它们用作静态方法来分组它们会是一个可怕的想法吗?

功能:

function cookie_get(){}
function cookie_set(){}
function cookie_delete(){}
Run Code Online (Sandbox Code Playgroud)

静态方法:

class cookie
{
    static function get(){}
    static function set(){}
    static function delete(){}
}
Run Code Online (Sandbox Code Playgroud)

kar*_*m79 10

如果您完全了解所涉及警告,那将是一个好主意.这被称为效用模式:

实用程序类的良好候选者是可以在功能上组合在一起的便捷方法.

  • PHP是一种过程语言,OOP功能作为事后补充.它完全是关于内置函数(具有高度不一致的命名约定),而不是将相关函数组合在一起的静态帮助器类. (3认同)
  • 谢谢,很高兴知道.我想知道,为什么PHP的原生函数不会使用它.为什么`str_replace()`不是`str :: replace()`? (2认同)

Mic*_*rdt 9

组织这样的功能实际上是一种很好的做法.现代的替代方案是使用命名空间.


Gor*_*don 8

是的,这将是一个可怕的想法,因为静态方法很难测试和模拟.为什么不创建一个真正的Cookie类,您可以在运行时使用这些方法作为常规方法进行配置.

如果您只想将这些函数分组到一个包中,您也可以使用命名空间.


编辑:因为你在评论中提出了它:是的,对于任何测试目的,常规函数与静态函数一样不可测试.所以你的初始情况就像改变它使用静态类一样"可怕".即使伪命名空间也没有给你任何好处,因为你已经将它应用到常规函数中.cookie_get是好还是坏Cookie::get.

  • @Gordon,如果没有意义我很抱歉,但是静态功能不是常规功能吗?我的意思是`cookie :: get()`比`cookie_get()`更静态(或更难测试)? (3认同)
  • 在PHP 5.3之前,命令太糟糕了. (2认同)