私有静态方法的使用
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
访问对象本身。也无法访问非静态对象属性。
在你的例子中,我认为如果你从非静态上下文中调用方法,你可以使它不是静态的。它不需要是静态的。但我不能告诉你这是否是好的做法。正是我会做的。
我正在尝试确定下面示例中的私有静态方法是否应该是非静态的。它只关心 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
访问对象本身。也无法访问非静态对象属性。
在你的例子中,我认为如果你从非静态上下文中调用方法,你可以使它不是静态的。它不需要是静态的。但我不能告诉你这是否是好的做法。正是我会做的。