如何从控制器向类库传递customer_id与date_preset参数?
问题分析与解决方案
首先你这段代码存在两个核心问题:
- PHP中类的
const是编译期常量,只能赋值字面量或常量表达式,不能用$customer_id这种动态变量赋值,这么写会直接触发语法错误。 - 类库的静态方法
customer()没有接收控制器传来的参数,根本无法获取到customer_id和date_preset的值。
下面给你两种可行的修改方案:
方案一:给静态方法传递参数(最直接的实现)
既然customer()是静态方法,直接把控制器里的参数传进去即可,类里无需定义无效的const:
修改后的类库代码
class GoogleAdsCustomerInfoLib { public static function customer($customerId, $datePreset) { // 这里直接使用传入的参数编写业务逻辑 // 示例逻辑: return [ 'customer_id' => $customerId, 'date_preset' => $datePreset ]; } }
修改后的控制器方法
public function customer(){ $data = [ 'customer_id' => '123456789', 'date_preset' => 'LAST_7_DAYS' ]; // 直接将参数传入静态方法 $customer = GoogleAdsCustomerInfoLib::customer($data['customer_id'], $data['date_preset']); return $customer; }
方案二:用实例属性+构造函数(适合多方法复用参数的场景)
如果类库有多个方法需要用到这两个值,可以把它们作为实例属性,通过构造函数注入:
修改后的类库代码
class GoogleAdsCustomerInfoLib { private $customerId; private $datePreset; // 构造函数接收参数并赋值给实例属性 public function __construct($customerId, $datePreset) { $this->customerId = $customerId; $this->datePreset = $datePreset; } public function customer() { // 直接使用实例属性编写业务逻辑 return [ 'customer_id' => $this->customerId, 'date_preset' => $this->datePreset ]; } // 其他需要用到这两个值的方法,也可以直接调用$this->customerId、$this->datePreset }
修改后的控制器方法
public function customer(){ $data = [ 'customer_id' => '123456789', 'date_preset' => 'LAST_7_DAYS' ]; // 实例化类时传入参数 $googleAdsLib = new GoogleAdsCustomerInfoLib($data['customer_id'], $data['date_preset']); $customer = $googleAdsLib->customer(); return $customer; }
注意:PHP的const从设计上就不支持动态赋值,所以不要试图用它来接收控制器传来的动态值,核心思路就是通过参数传递的方式把控制器的值给到类库使用。
内容的提问来源于stack exchange,提问作者AlfredC
相关产品推荐
相关产品推荐

