Boj*_*goj 3 php instanceof laravel php-carbon
在我的应用程序中,我使用类似以下内容的内容
if($val instanceof Carbon)
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,除非我之前在代码中使用Carbon(即使只是Carbon::now();),否则它总是返回 false。为什么?
您正在使用 Laravel 的类自动加载器。您已将其定义为config/app.php:
'Carbon' => Carbon\Carbon::class,
Run Code Online (Sandbox Code Playgroud)
...所以当你第一次运行它时:
Carbon::now();
Run Code Online (Sandbox Code Playgroud)
... PHP 需要一个Carbon尚未定义的类,因此会触发类自动加载,Laravel 会加载Carbon\Carbon命名空间并定义Carbon别名。因此,如果变量具有正确的类型,则$val instanceof Carbon可以返回。true
但instanceof本身不会触发类自动加载。文档表明它过去这样做过,但现在不再这样做了:
在 PHP 版本 5.1.0 之前,如果类名不存在,instanceof 将调用 __autoload()。
$val(我承认,如果您还没有加载该类,我仍然没有解释如何成为Carbon 的实例。)