Laravelで「Non-static method」のエラーが発生した時の対応方法をメモします。
このエラーはstaticではないメソッドを呼び出すときに発生します。
Laravelに限らずではありますが。。。
下記に「Non-static method」エラーの説明と対応方法を記載します。
「Non-static method」のエラー内容
実際のエラー内容としては、下記のようにエラーが出力されます。
簡単にいえば「staticではないですよー」ってことですね。
ErrorException: Non-static method App\Models\Hoge::getHoge() should not be called statically
「Non-static method」エラーになる原因
例で下記のようにコントローラーからモデルのメソッドを呼び出します。
【Controller】
下記は「Hoge」モデルクラスの「getHoge」メソッドを呼び出しています。
use App\Models\Hoge; class SampleController extends Controller { public function index() { Hoge::getHoge(); } }
【Models】
下記の場合はエラーになってしまいます。
原因はfunctionに「static」が無いからです。
class Hoge extends Model { public function getHoge() { // 処理 } }
なので「static」があればエラーにならず正常に動作します。
class Hoge extends Model { public static function getHoge() { // 処理 } }
「Non-static method」エラーの対処方法
上記のように「static」付ければ解決することはできますが、モデルを変更できない場合はコントローラー側で下記のように呼び出すとエラーとならずメソッドを呼び出すことができます。
【変更前】
use App\Models\Hoge; class SampleController extends Controller { public function index() { $res = Hoge::getHoge(); } }
【変更後】
use App\Models\Hoge; class SampleController extends Controller { public function index() { $model = new Hoge(); $res = $model->getHoge(); } }
このように呼び出すことによって「Non-static method」エラーを解消することができます。
今回は「Non-static method」エラーが発生した時の対応方法について記載しました。
以外と忘れてしまうことがあるのでメモします。