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