登録日:
                            2025-02-02  
                            最終更新日:
                            2025-04-10
                        
                        Laravel cannot be called statically 解決方法
Laravelで "Cannot be called statically" というエラーが発生する原因と解決方法を説明します。
エラーの原因
このエラーは、インスタンスメソッドを静的(static)に呼び出した 場合に発生します。 Laravelのモデルやクラスのメソッドを Class::method() のように呼び出した際、そのメソッドが static で定義されていないとエラーになります。
解決方法
① メソッドをインスタンス経由で呼び出す
(誤) 静的に呼び出している
use App\Models\User;
$name = User::getName(); // エラー発生
(正) インスタンスを作成して呼び出す
$user = User::find(1); // IDが1のユーザー取得
$name = $user->getName(); // 正しく動作
② メソッドを static にする
メソッドを静的に使いたい場合は、 static を追加する。
(誤) 非静的メソッドを静的に呼び出す
class User {
    public function getName() {
        return "John Doe";
    }
}
echo User::getName(); // エラー
(正) メソッドを static にする
class User {
    public static function getName() {
        return "John Doe";
    }
}
echo User::getName(); // 正しく動作
③ Laravelのモデルで static メソッドを使う
Eloquentモデルでは static メソッドとインスタンスメソッドを使い分ける。
(誤) インスタンスメソッドを静的に呼ぶ
use App\Models\User;
$users = User::getAllUsers(); // エラー発生
(正) 静的メソッドにする
use App\Models\User;
class User extends Model {
    public static function getAllUsers() {
        return self::all();
    }
}
$users = User::getAllUsers(); // 正しく動作
④ Facades を使用する
Laravelの ファサード (Facades) を使う場合、クラスのメソッドが static でないとエラーになる。 例えば、以下のようなカスタムクラスを static にすれば、ファサードとして利用できる。
(誤) ファサードで static なし
namespace App\Helpers;
class MyHelper {
    public function sayHello() {
        return "Hello, Laravel!";
    }
}
use App\Helpers\MyHelper;
echo MyHelper::sayHello(); // エラー
(正) static を追加
namespace App\Helpers;
class MyHelper {
    public static function sayHello() {
        return "Hello, Laravel!";
    }
}
use App\Helpers\MyHelper;
echo MyHelper::sayHello(); // 正しく動作
 
         
	 
                                                                


