在我的应用程序中,我使用类似下面的内容
if($val instanceof Carbon)
...
不幸的是,除非我以前在代码中使用Carbon(即使只是Carbon::now();
),否则它将始终返回false。为什么呢?
答案 0 :(得分:3)
您正在使用Laravel的类自动加载器。您已在config/app.php
:
'Carbon' => Carbon\Carbon::class,
...所以当你第一次运行时:
Carbon::now();
... PHP需要一个尚未定义的Carbon
类,因此类自动加载会被触发,Laravel会加载Carbon\Carbon
命名空间并定义Carbon
别名。因此,如果变量的类型正确,$val instanceof Carbon
可以返回true
。
但是, instanceof
本身不会触发类自动加载。 Documentation表示它过去曾这样做,但它不再这样做:
在PHP 5.1.0版之前,如果类名不存在,instanceof会调用__autoload()。
(我承认,如果你尚未加载课程,我仍然没有解释如何让$val
成为Carbon的实例。)