【问题标题】:PHP: __callStatic alternative for 5.2.xPHP:5.2.x 的 __callStatic 替代品
【发布时间】:2011-01-06 22:15:41
【问题描述】:

所以我的主机拒绝更新到 PHP 5.3(这很烦人,但同时也很好;我很灵活),但唯一真正让我失望的是没有 __callStatic 可用。

我有加载的模块,我想合并到一个类(即有一个加载模块的类,然后通过调用主类的 __callStatic 方法访问这些模块的功能),但是当我上传时从本地测试服务器到我的服务器,显然 __callStatic 方法不起作用。

是否有一个 仍然 静态的替代方案?我喜欢干净的代码寻找双冒号(即registry::some_func())而不是$registry->some_func()

另一个缺点是我现在不得不在函数中使用global 关键字(根据我自己的偏好,这非常、非常混乱)。

使用静态方法而不是非静态方法的代码也非常快,而且更干净。

另外:我考虑过像往常一样在 5.2 中编写 __callStatic 方法,然后显式调用这些方法,例如 registry::__callStatic("some_func"), array("val", "val2", "val3") 并让事情变得更简单,甚至更容易迁移当他们升级到 5.3 时。对这个方法有什么想法?

谢谢!

【问题讨论】:

    标签: php static call magic-methods


    【解决方案1】:

    如果想要这样做的唯一原因是双冒号的速度和主观吸引力,我会说要欣赏破折号的道,大胆尝试并使用对象实例。你所说的“干净的代码外观”就像锤子裤......一年酷,几年后当你年纪更大更聪明时就不那么酷了。 __callStatic() (IMVHO) 充其量只是一种不必要的小便利,而在最坏的情况下,它是糟糕的类设计的一种解决方法。 :)

    【讨论】:

    • 说得非常明智:] 我同意这几乎是我自己的规范。如果需要,我总是可以使用一些神奇的 linux 命令通过管道一起用静态调用替换整个代码(只需删除 $ 并将 -> 替换为 ::。谢谢!
    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多