私は以前、それは常にfalseを返します(だけでも、Carbon::now();
場合)コードでCarbonを使用しない限り、私は、次のは自分のアプリケーションで
if($val instanceof Carbon)
...
のようなものを使用し失敗しました。どうして?
私は以前、それは常にfalseを返します(だけでも、Carbon::now();
場合)コードでCarbonを使用しない限り、私は、次のは自分のアプリケーションで
if($val instanceof Carbon)
...
のようなものを使用し失敗しました。どうして?
あなたは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()を呼び出します。Documentationは、それは過去に、それはもはや行わないことをやった示唆しています。
(私はまだあなたはまだクラスをロードしていない場合は、$val
はカーボンのインスタンスで作ることができる方法の説明を持っていない認める。)
ありません確かに私は理解しています...以前にライブラリを使用していないと、 '$ val'はその時点でCarbonのインスタンスになりますか? (いずれにしても、おそらくクラスオートローダーがあります。) –
完全なコードを提供できますか? – tommy
'Carbon'クラスの完全な名前空間は' Carbon \ Carbon'ですので、あなたのチェックは 'if($ val instanceof Carbon \ Carbon)'でなければなりません。または、クラス名だけをチェックしたい場合は、ファイルの先頭に 'use Carbon \ Carbon;'を置き、 '$ val instanceof Carbon'を使用することができます。 – Bogdan