在我的应用程序中,我使用类似以下的东西
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的实例。)