【问题标题】:Chained Methods OOP call_user_func_array php链式方法 OOP call_user_func_array php
【发布时间】:2015-04-22 00:15:41
【问题描述】:

我想知道以下是否可能。我们有一个设计为使用链式方法的类。

$CarClass = $CarConnection->models->count();

在上面的示例中,我们正在计算模型。但是,想要动态地执行它。比如:

$CountArray = array('models','brands','countries');
foreach($CountArray AS $key => $value){
    $CarData[$value] = $CarConnection->$value->count();       
}

但是,这会输出一个错误:“在非对象中调用成员函数 count()”虽然我很确定计数存在,因为前面提到的函数正在工作。

一些谷歌搜索导致添加括号 { } 但这也不起作用。

 $CarData[$value] = $CarConnection->{$value}->count();    

任何一个解决方案?

亲切的问候,

彼得

【问题讨论】:

  • 当您尝试访问属性之一(型号、品牌或国家/地区)或魔术方法(如果有)时,您似乎得到了 null(或除对象之外的任何其他结果) $CarConnection 类不返回对象。调用 $CarConnection->{$value}->count();是正确的。
  • 确保$CarConnection 具有modelbrandscountries 属性,它们是公开count() 方法的对象。错误消息说您正在对不是对象的值调用count()。它可能是NULL 或其他东西(数组、字符串、整数等)

标签: php oop chained


【解决方案1】:

我可以在您的循环中发现语法错误: 它应该去 -

$CountArray = array('models','brands','countries');

foreach($CountArray as $key => $value){
$CarData[$value] = $CarConnection->$value->count();       

}

而且,您拥有的数组不是关联数组。所以你不需要$key! 试试这个:

foreach($CountArray as $value) {
 $CarData[$value] = $CarConnection->{$value}->count();
}

【讨论】:

  • 随着语法错误的改变,错误仍然存​​在。 (在答案中更正)。
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多