PHP は、変数の弱い型指定など、Web に適した多くの言語機能を提供するシンプルで強力な言語です。弱い型指定メカニズムでは、変数に任意の型の値を割り当てることができます。
PHP は Zend Engine (以下 ZE と呼びます) を通じて実行され、ZE は C で書かれており、下部に一連の弱い型メカニズムを実装しています。 ZE のメモリ管理では、コピーオンライトや参照カウントなどの最適化戦略を使用して、変数を再割り当てする際のメモリ コピーを削減します。
以下では、PHP の弱い型付けの原理を探るだけでなく、PHP 拡張機能についても書き、PHP 変数の操作方法も紹介します。
1. PHP 変数の型
PHP には 8 つの変数型があります:
PHP は変数の型を厳密にチェックしません。変数は表示せずに型を宣言し、実行時に値を直接割り当てることができます。変数も自由に変換できます。次の例のように、実装宣言を行わなくても、$i には任意のタイプの値を割り当てることができます。
[php] ビュー 普通のコピー
value | 変数 | |||||||||||||||
変数の特定の型 |
変数へのアクセス | ||||||||||||||||
Z_LVAL(zval) | (zval).value.lval||||||||||||||||
Z_DVAL(zval) | (zval).value.dval||||||||||||||||
Z_STRVAL(zval) | (zval).value.str.val||||||||||||||||
Z_STRLEN(zval) | (zval).value.str len||||||||||||||||
Z_ARRVAL(zval) | (zval).value.ht||||||||||||||||
Z_TYPE(zval) | (zval).type||||||||||||||||
Z_ L VAL_P(ズヴァル) | ( *zval).value.lval||||||||||||||||
Z_DVAL_P(zval) | (*zval).value.dval||||||||||||||||
Z_STRVAL_P(zval_p) | (*zval).value.str。 val||||||||||||||||
Z_STRLEN_P(zval_p) | (*zval).value.str.len||||||||||||||||
Z_ARRVAL_P(zval_p) | (*zval).value.ht||||||||||||||||
Z_OBJ_HT_P( zval_p) | (*zval).value.obj.handlers||||||||||||||||
Z_LVAL_PP(zval_pp) | (**zval).value.lval||||||||||||||||
Z_DVAL_PP(zval_pp) | (* *zval ).value.dval||||||||||||||||
Z_STRVAL_PP(zval_pp) | (**zval).value.str.val||||||||||||||||
Z_STRLEN_PP(zval_pp) | (**zval).value。 str.len||||||||||||||||
(**zval)。 6. 変数シンボル テーブルとスコープ PHP の変数シンボル テーブルと zval 値のマッピングは、HashTable (ハッシュ テーブルとも呼ばれます。以下、HashTable と呼びます) を介して行われ、次のような言語機能が含まれます。定数、変数、関数は HT によって編成され、PHP の配列型も HashTable を通じて実装されます。 [php] ビュー 普通のコピー $var の変数名は変数シンボル テーブルに格納され、$ を表します。var の型と値の zval 構造はハッシュ テーブルに格納されます。カーネルは、変数シンボル テーブルと zval アドレスのハッシュ マッピングを通じて PHP 変数へのアクセスを実装します。 なぜ範囲について言及する必要があるのですか?関数の内部変数が保護されているためです。スコープに応じて、PHP 変数はグローバル変数とローカル変数に分割されます。各スコープの PHP はシンボル テーブルの HashTable を保持します。 PHP で関数またはクラスを作成するとき、ZE は関数またはクラス内の変数がローカル変数であることを示す新しいシンボル テーブルを作成します。これにより、関数内の変数は外部からアクセスできなくなります。 PHP 変数を作成するとき、ZE は zval を割り当て、対応する型と初期値を設定し、ユーザーが変数を使用できるように現在のスコープのシンボル テーブルに変数を追加します。
[php]ビュー 普通のコピー Zend/zend_globals.h
); 変数 $temp を関数の外に作成し、グローバル シンボル テーブルに追加し、グローバル シンボルの HashTable に割り当てます。 table 値「global」を持つ文字 zval。関数 test の内部変数 $temp を作成し、それを関数 test に属するシンボル テーブルに追加し、文字タイプ zval に値 'active' を割り当てます。 7. PHP 拡張機能での変数操作
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
function_exists() はカスタム関数を決定できません
Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";
から 2024-04-29 11:01:01
0
2
1429
親ウィンドウには出力がありません
document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');
から 2024-04-18 23:52:34
0
1
1284
PX から REM への自動変換エラー
<style>html { font-size: calc(100vw / 3.75); }body { font-size: 0.16rem; }</style...
から 2024-04-16 09:34:16
0
0
4687
関連トピック
詳細>
|