Вы можете достичь желаемого поведения, используя магические методы __ call и __ callStatic если ваш реальный метод статичен, вы можете использовать __call()
для перехвата всех "нестатических" вызовов и использования егодля вызова static и использования __callStatic
для переадресации вызовов новому экземпляру в этот класс.
Ваши методы должны быть всегда статическими, потому что если существует нестатический метод и вы вызываете его статически, php вызывает ошибку
Non-static method Foo::myMethod() should not be called statically
Нет проблем, если ваш метод статичен
class Order extends Model {
public static function myMethod() {
return static::query()->where(...)->get(); // example
}
public function __call($name, $arguments) {
return forward_static_call_array([__CLASS__, $name], $arguments);
}
public static function __callStatic($name, $arguments) {
return call_user_func_array([app(__CLASS__), $name], $arguments);
}
}
(new Order())->myMethod();
Order::myMethod();