Carbon实例失败


instanceof Carbon fails

在我的应用程序中,我使用类似以下的东西

if($val instanceof Carbon)
...

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

您正在使用Laravel的类自动加载器。您已在config/app.php:中对此进行了定义

'Carbon' => Carbon'Carbon::class,

所以当你第一次运行这个时:

Carbon::now();

PHP需要一个尚未定义的Carbon类,因此会触发类自动加载,Laravel加载Carbon'Carbon命名空间并定义一个Carbon别名。因此,如果变量具有正确的类型,则$val instanceof Carbon可以返回true

但是,instanceof本身不会触发类自动加载。文件显示,它过去曾这样做,但现在已经不再这样做了:

在PHP 5.1.0版本之前,如果类名不存在,instanceof会调用__autoload()。

演示

(我承认,如果你还没有加载类,我仍然无法解释如何使$val成为Carbon的实例。)