Laravel调用Collivery的getTowns()非静态方法报错,求正确调用方式
解决Laravel中Collivery包非静态方法调用错误
嘿,这个问题很常见!你遇到的Non-static method Mds\Collivery::getTowns() should not be called statically错误,本质是因为getTowns是非静态方法,它依赖类实例的属性(比如你代码里的$this->cache、$this->check_cache),不能直接用::静态调用,必须先创建类的实例再调用方法。
具体解决步骤:
1. 先实例化Collivery类
首先你需要创建Mds\Collivery类的实例,根据你的代码来看,这个类用到了缓存实例,所以要确保实例化时传入必要的依赖(如果类的构造函数需要的话):
// 方式1:手动实例化(如果构造函数需要缓存,传入Laravel的缓存实例) $collivery = new Mds\Collivery(app('cache')); // 方式2:如果类的构造函数不需要参数,直接实例化 // $collivery = new Mds\Collivery();
2. 调用实例的getTowns方法
实例创建好后,就可以用->调用非静态方法了:
$country = "ZAF"; $province = null; // 或者传入你需要的省份值 $towns = $collivery->getTowns($country, $province);
更优雅的Laravel方式:依赖注入
如果是在控制器、服务类里使用,推荐用Laravel的依赖注入,让容器帮你管理实例:
use Mds\Collivery; class YourController extends Controller { public function getTownsAction(Collivery $collivery) { // 直接使用注入的实例调用方法 $towns = $collivery->getTowns("ZAF"); // 返回结果或者处理逻辑 return response()->json($towns); } }
为什么静态调用不行?
从你提供的getTowns方法代码能看到,它用到了$this->check_cache和$this->cache这些实例属性——静态方法属于类本身,无法访问实例专属的属性,所以必须通过类的实例来调用这个方法。
内容的提问来源于stack exchange,提问作者LivingPhate
相关产品推荐
相关产品推荐

