除了单例之外,在 PHP 中使用静态方法还有哪些令人信服的理由?

发布于 2024-10-12 12:42:50 字数 412 浏览 3 评论 0原文

我最近回答了这个问题:

在 PHP 中使用静态方法的充分理由是什么?

首先想到的是当然,是一个单身人士。无一例外,其他回答者都提供了相同的单例示例。但这让我思考......除了创建单例之外,我实际上从未使用过静态方法或属性!

简短的搜索发现了许多有关使用静态方法的教程,几乎所有这些教程都实现了同一单例类的某些变体。

我真的很感兴趣:除了创建单例之外,我们还有什么理由必须创建静态方法(或者不仅仅是因为懒惰并想要一个全局函数)?

有没有人有一个使用静态方法的实用示例,而使用动态设计模式无法更好地完成该示例?如果在上下文中有意义,示例可以是单例,但除了解决方案的单例方面之外,我对其他原因感兴趣。

I recently answered this question:

What are good reasons to use static methods in PHP?

The first thing to come to mind, of course, was a singleton. With little exception, the other answerers provided the same singleton example. But that got me thinking... I don't really ever use static methods or properties for anything besides creating singletons!

A brief search netted many tutorials on using static methods, almost all of which implement some variation of the same singleton class.

I'm really interested: What reason do we have to make static methods other than creating singletons (or other than just being lazy and wanting a global function)?

Does anyone have a pragmatic example of using a static method that could not be accomplished better using a dynamic design pattern? The example can be a singleton if that makes sense in it's context, but I'm interested in other reasons besides the singleton-aspect of the solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

九局 2024-10-19 12:42:50

工厂模式通常也会使用静态调用;但是,对于任何不依赖于实例属性或其他实例方法的类方法,使用静态方法是明智的,特别是当出于性能原因定期调用它们时。

PHPExcel 中以下方法的逻辑位置是在 PHPExcel_Cell 类中,因为它直接涉及操作单元格地址(任何单元格地址,而不仅仅是特定实例的地址),但它不依赖于实例,所以我将其声明为静态。

public static function stringFromColumnIndex($pColumnIndex = 0) {
    if ($pColumnIndex < 26) {
        return chr(65 + $pColumnIndex);
    } elseif ($pColumnIndex < 702) {
        return chr(64 + ($pColumnIndex / 26)).chr(65 + $pColumnIndex % 26);
    }
    return chr(64 + (($pColumnIndex - 26) / 676)).chr(65 + ((($pColumnIndex - 26) % 676) / 26)).chr(65 + $pColumnIndex % 26);
}

而且这个方法测试起来并不是特别困难

A factory pattern will normally use a static call as well; but it's sensible to use static methods for any class mathod that has no dependencies on the instance properties or other instance methods, especially when they're called regularly, for performance reasons.

The logical place for the following method in PHPExcel is in the PHPExcel_Cell class, because it pertains directly to manipulating a cell address (any cell address, not just the address of a specific instance), but it has no dependency on the instance, so I declare it static.

public static function stringFromColumnIndex($pColumnIndex = 0) {
    if ($pColumnIndex < 26) {
        return chr(65 + $pColumnIndex);
    } elseif ($pColumnIndex < 702) {
        return chr(64 + ($pColumnIndex / 26)).chr(65 + $pColumnIndex % 26);
    }
    return chr(64 + (($pColumnIndex - 26) / 676)).chr(65 + ((($pColumnIndex - 26) % 676) / 26)).chr(65 + $pColumnIndex % 26);
}

And this method isn't particularly difficult to test

思念满溢 2024-10-19 12:42:50

这不一定与模式有关。 PHP 不是持久环境,因此任何对象实例的生命周期可能是毫秒,但它需要内存分配/释放和额外的 CPU 周期。除非您需要可重用的对象或集合,否则我发现非静态对象没有什么理由。

It's not necessarily about patterns. PHP is not a persistent environment, so lifetime of any object instance is likely to be milliseconds, but it requires memory allocation/release and extra cpu cycles. Unless you need reusable objects or collections, I find non-static objects to have little justification.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文