专业人士、业余爱好者和php爱好者。
我正在处理Laravel任务,该任务包含解析的动态数据、集合和图形。
为了弄清楚出了什么问题,我需要一些帮助,因为我再也看不清楚了。我应该停下来做其他事情,但这对我来说是一个瓶颈
我有一个叫订单的集合。在这些订单中,我已按日期对它们进行了分组。到目前为止还不错。下面的例子是一个骰子和转储。
这正是我在这个阶段所需要的。
"2022-01-29" => IlluminateSupportCollection {#4397 ▶}
现在是mweh部分。
我有一个名为Datahandler 的类
在那个类中,我有三种方法
它的简化版本:
Abstract Class DataHandler
{
/**
* Handles the conversion to dataset for the chart
*
* @param string $label
* @return void
*/
public function handle(string $label):void
{
$this->chart->addDataset($this->process->map(
$this->bind([$this, 'dataLogic'])
)->toArray()
, $label
);
}
/**
* Binds callbacks for the Handler of the class
*
* @param array $callable
* @return Closure
*/
function bind(array $callable): Closure
{
return function () use ($callable) {
call_user_func_array($callable, func_get_args());
};
}
/**
* Defines the fields I need to return to the collection
*
* @param Collection $group
* @return array
*/
#[Pure] #[ArrayShape(['total' => "int"])]
protected function dataLogic(Collection $group): array
{
return [
'total' => $group->count()
];
}
}
因此,在handle函数中,您可以看到我正在绑定($this->bind(((我的$this->处理(集合数据(到回调($this->dataLogic(((。受保护的函数dataLogic受到保护,因为这个抽象类的每个子级都需要有自己的逻辑。
因此,这个函数是从父函数内部执行的,这是很好的原因,因为它应该是默认行为,除非子函数具有相同的函数。如果我在方法dataLogic中对$group执行var_dump,我也有正确的值,并且$group->count((还显示所述数据的相应计数。
但是返回为null。我在使用回调方面没有受过很好的训练,有人知道哪里出了问题,甚至有比我试图创建的解决方案更好的解决方案吗?
忘记提到我的代码的结果:
"2022-01-29" => null
应该是
"2022-01-29" => 30
谨致问候,Marcel
我通过以下操作解决了这个问题。
我完全删除了bind函数,并将我的函数作为可调用函数处理,因为它得到了所需的解决方案,有更好的解决方案吗,当然还有其他地方,所以任何想法都是受欢迎的,但现在我可以继续做下去。
Abstract Class DataHandler
{
/**
* Handles the conversion to dataset for the chart
*
* @param string $label
* @return void
*/
public function handle(string $label):void
{
$this->chart->addDataset($this->process->map($this->dataLogic()
)->toArray()
, $label
);
}
/**
* Defines the fields I need to return to the collection
*
* @return array
*/
#[Pure] #[ArrayShape(['total' => "int"])]
protected function dataLogic(): callable
{
return function ($group) {
return $group->count();
};
}
}