instanceof Carbon терпит неудачу

В моем приложении я использую что-то вроде следующего

if($val instanceof Carbon)
...

к сожалению, если я не использую ранее углерод в коде (даже если просто Carbon::now();) он всегда будет возвращать false. Зачем?

0

Решение

Вы используете автозагрузчик классов 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, если вы еще не загрузили класс.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]