PHP Carbon 在双引号字符串中添加动态对象 属性

PHP Carbon add dynamic object property inside double quoted string

我正在尝试从使用动态对象属性的现有 Laravel 日期构建 Carbon 日期:

private static function createEvent($booking, $service) {
    dd(Carbon::createFromFormat('Y-m-d H:i:s', "$booking->service_{$service}_date_end $booking->service_1_time_end"));
}

这不断返回:

Unexpected data found. Unexpected data found. Unexpected data found. Data missing

知道如何让它工作吗?我似乎无法将变量直接传递给 Carbon,因为它需要一个字符串作为第二个参数。双引号让事情变得有点棘手。

让我们稍微分解一下,您有 2 个属性,一个是动态的。

所以要访问动态 属性 你可以这样做

 $prop = "service_{$service}_date_end";

 $booking->{$prop}

然后我们就有了一个标准 属性 和一个 space,然后把它们放在一起[=13​​=]

     dd(Carbon::createFromFormat('Y-m-d H:i:s', $booking->{$prop}.' '.$booking->service_1_time_end"));

现在你也许可以把它们放在一条线上,但你基本上是双重插值变量。因此,如果您先处理一个然后再处理另一个,那么阅读和操作起来会更容易。

对我来说,可读性就是一切,保持简单,它就会起作用。

也就是说,我认为这种方法存在根本性缺陷,因为您无法真正知道 属性 是否确实存在。所以你让自己容易出错,比如未定义的对象 属性 .

您可以使用简单的 switch 语句来更稳健地完成它。

但是,在不知道您如何使用它的全部范围或 $service 的来源的情况下,我不能这么说,它在您的用例中可能没问题。我只是想提醒你一句。