Carbon 实例失败

instanceof Carbon fails

在我的应用程序中,我使用如下内容

if($val instanceof Carbon)
...

不幸的是,除非我之前在代码中使用 Carbon(即使只是 Carbon::now();),否则它总是 return 错误。为什么?

您正在使用 Laravel 的 class 自动加载器。您已在 config/app.php:

定义了它
'Carbon' => Carbon\Carbon::class,

... 所以当您第一次 运行 时:

Carbon::now();

... PHP 需要一个尚未定义的 Carbon class 所以 class 自动加载被触发并且 Laravel 加载 Carbon\Carbon 命名空间并定义了一个 Carbon 别名。因此 $val instanceof Carbon 可以 return true 如果变量具有正确的类型。

但是,instanceof本身不会触发class自动加载Documentation 表示它过去曾这样做,但现在不再这样做了:

Before PHP version 5.1.0, instanceof would call __autoload() if the class name did not exist.

Demo

(我承认,如果您还没有加载 class,我仍然没有解释如何使 $val 成为 Carbon 的一个实例。 )