instanceof Carbon失败了

时间:2016-03-29 15:06:50

标签: php laravel instanceof php-carbon

在我的应用程序中,我使用类似下面的内容

if($val instanceof Carbon)
...

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

1 个答案:

答案 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()。

Demo

(我承认,如果你尚未加载课程,我仍然没有解释如何让$val成为Carbon的实例。)