検索
ホームページphp教程php手册PHP グローバル変数: PHP ソースコード分析 - 弱い型変数の実装


PHP は、弱く型付けされた動的言語スクリプトです。変数を宣言するとき、変数が保持するデータ型を指定する必要はありません。
例:
$var = 1;
$var = "variable";
$var = 1.00;
$var = array();
$var = new Object();
動的変数は実行時に変更でき、使用前に変数の型を宣言する必要はありません。
それでは、質問 1: Zend エンジンはこの弱い型を C でどのように実装するのでしょうか?
実際、PHPで宣言した変数はZEではzvalという構造体に格納されます。
まず、Zend/zend.h を開いて zval の定義を確認します。
typedef struct _zval_struct zval;
struct _zval_struct {
/* 変数情報 */
zvalue_value value; * /
zend_uint refcount__gc;
zend_uchar type; /* アクティブな型 */
zend_uchar is_ref__gc;
};
typedef Union _zvalue_value {
long lval; /* long lval;
double dval; /* double 値 */
struct {
char *val;
int len;
} str;
HashTable *ht;
zend_object_value obj;
} zvalue_value;
Zend/zend_types.h:
typedef unsigned char zend_bool;
typedef unsigned char zend_uchar;
typedef unsigned int zend_uint;
typedef unsigned long zend_ulong;
typedef unsigned short zend_ushort;
上記のコードから、_zvalue_value が実際にデータを保存するための重要な部分であることがわかります。弱い型指定の変数宣言は共用体を通じて実装されています
質問 2: Zend エンジンはどのようにして PHP で複数のデータ型を識別し、保存しますか?
_zval_struct.type は変数の実際の型を格納し、その型に基づいて zvalue_value の値を取得する方法を選択できます。
型値リスト (Zend/zend.h):
#define IS_NULL 0
#define IS_LONG 1
#define IS_DOUBLE 2
#define IS_BOOL 3
#define IS_ARRAY 4
#define IS_OBJECT 5
#define IS_STRING 6
#define IS_RESOURCE 7
#define IS_CONSTANT 8
#define IS_CONSTANT_ARRAY 9
簡単な例を見てみましょう:

$a = 1;
//この時点では zval.type = IS_LONG なので、zval.value は lval を取得します。
$a = array();
//この時点では zval. type = IS_ARRAY の場合、zval.value は ht を取得します。
最も複雑なもので、サードパーティの拡張機能の開発でよく使用されるのは「リソース タイプ」です。
PHP では、以下に属さないものはすべてリソース タイプとなります。 PHP の組み込み変数タイプの変数はリソースとして保存されます。 この記事へのリンク http://www.cxybl.com/html/wlbc/Php/20121213/34971.html



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。