2016-03-29 11 views
0

私は以前、それは常にfalseを返します(だけでも、Carbon::now();場合)コードでCarbonを使用しない限り、私は、次のは自分のアプリケーションで

残念ながら
if($val instanceof Carbon) 
... 

のようなものを使用し失敗しました。どうして?

+1

ありません確かに私は理解しています...以前にライブラリを使用していないと、 '$ val'はその時点でCarbonのインスタンスになりますか? (いずれにしても、おそらくクラスオートローダーがあります。) –

+0

完全なコードを提供できますか? – tommy

+7

'Carbon'クラスの完全な名前空間は' Carbon \ Carbon'ですので、あなたのチェックは 'if($ val instanceof Carbon \ Carbon)'でなければなりません。または、クラス名だけをチェックしたい場合は、ファイルの先頭に 'use Carbon \ Carbon;'を置き、 '$ val instanceof Carbon'を使用することができます。 – Bogdan

答えて

3

あなたは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は、それは過去に、それはもはや行わないことをやった示唆しています。

Demo

(私はまだあなたはまだクラスをロードしていない場合は、$valはカーボンのインスタンスで作ることができる方法の説明を持っていない認める。)

関連する問題