ホームページ > バックエンド開発 > PHPの問題 > PHP変数はどのように実装されていますか?

PHP変数はどのように実装されていますか?

coldplay.xixi
リリース: 2023-03-04 22:08:01
オリジナル
1972 人が閲覧しました

PHP 変数の実装方法: 最初に zval ポインターを宣言し、メモリの一部を適用します。次に、[ZVAL_STRING] マクロを通じて値を bar に設定します。最後に、この zval を現在のシンボル テーブルに追加し、定義します。そのラベルは foo です。

PHP変数はどのように実装されていますか?

[関連する学習の推奨事項: php グラフィック チュートリアル]

php 変数の実装方法:

はじめに

公式の PHP 実装では、すべての変数は同じデータ構造 (zval) を使用して保存され、この構造は PHP の各変数も表します。タイプ。これには、変数の値だけでなく、変数の型も含まれます。これは PHP の弱い型付けの中核です。

  • #スカラー型: boolean、integer、float(double)、string

  • 複合型: 配列、オブジェクト

  • 特別なタイプ: リソース、NULL

変数ストレージ構造

PHP はカーネルで zval 構造を使用します。 , その定義は Zend/zend.h ファイルにあります。これは短く簡潔で、4 つのメンバーのみで構成されています:

struct _zval_struct {
    zvalue_value value; /* 变量的值 */
    zend_uint refcount__gc;
    zend_uchar type;    /* 变量当前的数据类型 */
    zend_uchar is_ref__gc;
};
typedef struct _zval_struct zval;
//在Zend/zend_types.h里定义的:
typedef unsigned int zend_uint;
typedef unsigned char zend_uchar;
ログイン後にコピー

  • refcount__gc は参照カウント 1

    を表します。
  • is_ref__gc は参照であるかどうかを示します。 0

  • value は変数の値を格納します。

  • type 特定のタイプ変数

変数のタイプ

zval 構造体の type フィールドは、弱い型付けを実装するための最も重要なフィールドです。可能性があるのは:

IS_NULLIS_BOOLIS_LONGIS_DOUBLEIS_STRINGIS_ARRAY ,IS_OBJECT,IS_RESOURCE。文字通りに理解すると簡単ですが、これらは単に型の一意の識別子であり、型の違いに応じて値フィールドに異なる値が格納されます。さらに、これらで定義される型は IS_CONSTANTIS_CONSTANT_ARRAY です。

<?php
$foo = &#39;bar&#39;;
?>
ログイン後にコピー

上記は PHP 言語の例です。変数を作成し、その値を 'bar' に設定します。手順: zval 構造体を作成し、そのタイプ。値を「bar」に設定します。ユーザーが PHP でこの変数を使用できるように、それを現在のスコープのシンボル テーブルに追加します。具体的なコードは次のとおりです:

{
    zval *fooval;
    MAKE_STD_ZVAL(fooval);
    ZVAL_STRING(fooval, "bar", 1);
    ZEND_SET_SYMBOL( EG(active_symbol_table) ,  "foo" , fooval);
}
ログイン後にコピー

まず、zval ポインターを宣言し、メモリの一部を適用します。次に、ZVAL_STRING マクロで値を bar に設定します。最後の行の機能は、この zval を現在のシンボル テーブルに追加し、そのラベルを foo として定義し、ユーザーがコード内で $foo を通じて使用できるようにすることです。

関連する学習に関する推奨事項:

php プログラミング (ビデオ)

以上がPHP変数はどのように実装されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート