我在处理遗留代码时发现了这个问题,在OrderService中有一个静态方法createOrder()
,我想检查商店是否打开
我想做一个非静态的方法openingHours()
来检查时间。
我可以为这个解决方案使用ReflactionClass吗?
当我在createOrder()
中使用openingHours()
时,会发生以下错误:
无法在非对象上下文中使用“$this”。intelephense(1030)
$this不能用于static methods.phpcreateOrder()
方法:
public static function createOrder(array $data {
// some logic
$is_opening = $this->openingHours();
if ($is_opening != true) {
$msg = trans('stores.not_available');
$data['fail_msg'] = $msg;
return $data;
}
}
openingHours()
public function openingHours($store){
return 'hello';
}
5条答案
按热度按时间n3schb8v1#
createOrder不能是静态的,或者openingHours也必须是静态的。除非你在CNODErOrder中有或创建了一个示例,你可以在这个示例上调用非静态方法openingHours,比如$store->openingHours()。
bksxznpy2#
你能告诉我
$store
变量是什么意思吗?我猜它可能包含Store Model对象,所以我建议将openingHours()
方法放在Store Model类中。比这更好的是,我建议在你的商店模型类中创建一个getter,以获得一个表单中的开放时间,这是很好的进行验证。
camsedfj3#
考虑在非静态函数中转换 createOrder()。
如果这不可行,唯一的方法是在静态函数中创建类的示例:
或者,如果你需要依赖注入:
zsbz8rwp4#
解决方法之一是调用类中不存在的方法,并使用
__callStatic
魔术方法来引用所需的方法。然后这样叫
我希望能成功。
q5iwbnjs5#
你可以在静态函数中创建一个新的对象来访问非静态函数,比如:
}
我希望这对你有帮助,如果有问题,演示更多