В моем приложении я использую что-то вроде следующего
if($val instanceof 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, если вы еще не загрузили класс.)
Других решений пока нет …