これは古い質問だと思いますが、PHPがOPからの質問をどのように処理するかについてのより具体的な情報を次に示します。
これは、最初に使用する PHP リファレンスのページです。
変数の概要
リンクが好ましくないことはわかっていますが、そのリンクは安定している必要があり、PHP リファレンス ドキュメントの大量コピーはしたくありません。ここにハイライトがあります。
OP: PHP は、どのタイプの変数を使用するか (または使用するか) をどのように認識しますか?
PHP は C で書かれており、zval を呼び出す C 構造体 typedef と、すべての変数を表す zval_value を呼び出す C 共用体 typedef を使用します。
typedef struct _zval_struct {
zvalue_value value; /* variable value */
zend_uint refcount__gc; /* reference counter */
zend_uchar type; /* value type */
zend_uchar is_ref__gc; /* reference flag */
} zval;
「エンジンは、構造体のさまざまなフィールドにアクセスするための統一された直感的なマクロのセットを提供することにより、任意の型になり得る変数の概念の複雑さを隠そうとします。」
「PHP は動的で型付けの緩い言語であり、コピーオンライトと参照カウントを使用します。」参照カウントとコピー オン ライト (COW) は、PHP が使用する 2 つの強力な概念であり、ここでは説明しませんが、読む価値があります。
"弱い型付けは、実行時に変数を必要な型に変換または強制するというエンジンの設定を暗示しています。参照カウントは、変数がユーザー コードで参照を持たなくなったときにエンジンが推測できる手段です。変数に関連付けられた構造を解放できます。」
" zval_value は、変数が保持できるすべての型を表現できる共用体です。 "
" ...変数は 1 つの型にすることができます。変数データは、zval_value 共用体の適切なフィールドによって表されます。zval 自体は、型、参照カウント、および変数が参照であるかどうかを示すフラグを保持します。 "
PHP はどのようにコンパイルしますか?
「コンパイル」はさまざまな意味を持つ広義の言葉であり、PHP は伝統的な意味でコンパイルしません。ソースコードをプロセッサが実行できる命令であるオペコードに変換する一種のプリコンパイルを行います。これらのオペコードはキャッシュされるため、PHP は頻繁に呼び出されるスクリプトを解析する必要がありません。
変数の型がどうなるかをどのように知るのでしょうか? それも気にしますか?
すでに上で引用したように、これは PHP エンジンの「実行時に変数を必要な型に変換または強制する設定」です。基本的に PHP は、変数の作成時に変数の型を決定するものを常に保存しますが、変数が参照されると、PHP は変数が使用されているコンテキストに基づいて型が何であるかを別の決定を行います。
" PHP は型付けが弱いため、エンジンは変数をある型から別の型に変換するための API 関数を提供します。 "
エンジンには、zvals を操作して変数の型を変換するために使用する一連のマクロがあるため、通常はそれに対処する必要はありません。
zval が実際にどのように表示されるかを確認したい場合は、次のコマンドでダンプできます。
debug_zval_dump($variableName);