You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:07:05