非オブジェクトのメンバー関数への呼び出しを$new->sound();
トリガーする場合は、オブジェクト ( ) ではない何かに対してメンバー関数 ( ) を呼び出そうとしていることを意味します。それが本当の問題であり、投稿したコードではトリガーできません。実際のコードでそのエラーが発生すると確信していますが、問題を再現しない簡略化されたバージョンを投稿しました。sound()
$new
あなたが投稿した単純化されたコードは、もちろん、返された値を出力したり使用したりしないことを除いて、問題なく動作するはずです。少し修正すると、静的メソッドを呼び出す両方の方法が有効であることがわかります。
<?php
error_reporting(-1);
class Dog{
public static function sound(){
$bark = "WOOF!";
return $bark;
}
}
$new = new Dog();
echo Dog::sound();
echo $new->sound();
実際に見てください。
マニュアルはそれを明示的に述べていないかもしれませんが、暗黙のうちにそれが可能であることを確認しています:
クラスのプロパティまたはメソッドを static として宣言すると、クラスのインスタンス化を必要とせずにアクセスできるようになります。
[...]
静的メソッドは作成されたオブジェクトのインスタンスなしで呼び出すことができるため、疑似変数 $this は static として宣言されたメソッド内では使用できません。
義務化されていないことは、禁止されていることと同じではありません。
矢印演算子を使用してオブジェクトから静的プロパティにアクセスすることはできません->
。
メソッドではなくプロパティ。
非静的メソッドを静的に呼び出すと、E_STRICT レベルの警告が生成されます。
それは反対のことであり、許可されていないと明確に文書化されています