馬場がすでに指摘したように、それE_STRICT
はあなたの構成に依存する結果になります。
しかし、それがあなたにとって問題ではないとしても、静的メソッドを非静的な方法で呼び出すことから生じる可能性のある落とし穴のいくつかに言及する価値があると思います。
次のようなクラス階層がある場合
class A {
public static function sayHello() {
echo "Hello from A!\n";
}
public function sayHelloNonStaticWithSelf() {
return self::sayHello();
}
public function sayHelloNonStaticWithStatic() {
return static::sayHello();
}
}
class B extends A {
public static function sayHello() {
echo "Hello from B!\n";
}
public function callHelloInMultipleDifferentWays() {
A::sayHello();
B::sayHello();
$this->sayHelloNonStaticWithSelf();
$this->sayHelloNonStaticWithStatic();
$this->sayHello();
}
}
$b = new B();
$b->callHelloInMultipleDifferentWays();
これにより、次の出力が生成されます。
Hello from A!
// A::sayHello() - obvious
Hello from B!
// B::sayHello() - obvious
Hello from A!
// $this->sayHelloNonStaticWithSelf()
// self alweays refers to the class it is used in
Hello from B!
// $this->sayHelloNonStaticWithStatic()
// static always refers to the class it is called from at runtime
Hello from B!
// $this->sayHello() - obvious
ご覧のとおり、静的メソッドと非静的メソッドの呼び出しと手法を組み合わせると、予期しない動作を簡単に実現できます。
したがって、私のアドバイスは次のとおりです。Class :: methodを使用して、呼び出す予定の静的メソッドを明示的に呼び出します。または、静的メソッドを使用しない方がよいでしょう。静的メソッドを使用すると、コードがテストできなくなります。