Laravel:Non-static methodのエラーが発生した時の対応方法

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エラーが発生した時の対応方法について記載しました。
以外と忘れてしまうことがあるのでメモします。

  • このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です