私有静态方法的使用

Use of private static methods

我正在尝试确定下面示例中的私有静态方法是否应该是非静态的。它只关心 class 的静态属性,这让我相信它作为静态方法是可以的。但是,它仅从非静态方法调用,这表明它也应该是非静态方法。

我明白什么时候 public 方法应该是静态的,但不明白什么时候私有方法应该是静态的。

提前感谢您的建议!

<?php
class MyClass
{
    private static $initialized = false;
    private static $staticProperty1;
    private static $staticProperty2;
    private        $normalProperty1;

    public function __construct($normalProperty)
    {
        $this->normalProperty1 = $normalProperty;
    }

    public function doSomething()
    {
        self::initialize();
        // Now do some other stuff
    }

    private static function initialize()
    {
        if (!self::$initialized) {
            self::$staticProperty1 = 'Hello';
            self::$staticProperty2 = 'World';
            self::$initialized = true;
        }
    }
}

通常,当我希望我的 public 静态方法调用另一个方法时,我会使用私有静态方法。

这是一个有趣的问题。您想知道什么时候私有函数应该是静态的。 如果你想从另一个静态方法调用它,它必须是静态的。那是因为您无权访问 $this.

我之前的假设是不正确的。您还可以从静态函数调用非静态方法。但是您必须考虑到您无权使用变量 $this 访问对象本身。也无法访问非静态对象属性。

在你的例子中,我认为如果你从非静态上下文中调用方法,你可以使它不是静态的。它不需要是静态的。但我不能告诉你这是否是好的做法。正是我会做的。