ホームページ バックエンド開発 PHPチュートリアル PHP 変数が Zend カーネルに保存される方法

PHP 変数が Zend カーネルに保存される方法

Jun 13, 2016 pm 12:23 PM
define zend zval

PHP 変数が Zend カーネルに格納される方法

PHP は弱い型付け言語であるため、PHP の変数はあらゆるデータ型を保存できます。ただし、PHP は C 言語で書かれており、各変数の型は固定されています (型変換を強制することはできますが、zend エンジンでは問題が発生する可能性があります)。 、それは、「変数はどのように型を保存できますか?」です。
zend/zend.h ヘッダー ファイルには、次の構造があります。

<code>typedef struct _zval_struct zval;typedef union _zvalue_value {    long lval;    double dval;    struct {        char *val;        int len;    }str;    HashTable *ht;    zend_object_value obj;} zvalue_value ;struct _zval_struct {    zvalue_value value;    zend_uint refcount;    zend_uchar type;    zend_uchar is_ref;};</code>
ログイン後にコピー

zval 構造は、一般的に使用される PHP 変数をカーネルで表現する方法です。 zval 構造体には、次の 4 つのメンバー変数があります。

<code>zvalue_value value;  //变量的值,PHP变量的值就保存在这里zend_uint refcount;  //变量引用数,变量引用计算器zend_uchar type;     //变量的类型zend_uchar is_ref;   //变量是否被引用</code>
ログイン後にコピー

zval 構造体の value メンバー変数は、zvalue_value 共用体であるため、PHP は任意の構造体の型を維持できます。結合。 zvalue_value 共用体のメンバー変数からわかるように、異なる型は異なるメンバー変数に保存されるため、PHP 変数は任意のデータ型を格納できます。たとえば、変数が整数型の場合は value の lval メンバー変数に保存され、変数の型が文字列の場合は value の str メンバー変数に保存されます。

PHP 変数が Zend カーネルに保存される方法もう 1 つの質問は、zend エンジンはこの変数に格納されている型をどのようにして知るのでしょうか? zval 構造体に type メンバー変数があることに気付きました。このメンバー変数は php 変数の型を保存するためのものです。
zend エンジンは 8 つの変数タイプを定義します。

<code>#define IS_NULL 0#define IS_LONG 1#define IS_DOUBLE 2#define IS_STRING 3#define IS_ARRAY 4#define IS_OBJECT 5#define IS_BOOL 6#define IS_RESOURCE 7</code>
ログイン後にコピー
各マクロ定義は、PHP 言語層のタイプに対応します。たとえば、zval の type メンバー変数が IS_STRING (

に等しい場合) )、この変数の型が文字列型であることを示します。 zval.type==IS_STRING

著作権表示: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

定義複数行マクロを定義する方法 定義複数行マクロを定義する方法 Oct 11, 2023 pm 01:24 PM

define は、`\` を使用して `do { \ printf("%d\n", x); \ } while (0)` を複数行に分割して定義することで、複数行のマクロを定義します。マクロ定義では、円記号「\」をマクロ定義の最後の文字にする必要があり、その後にスペースやコメントを続けることはできません。行継続に「\」を使用する場合は、コードを読みやすくし、各行の末尾に「\」があることを確認するように注意してください。

PHP における定義関数の重要性と役割を探る PHP における定義関数の重要性と役割を探る Mar 19, 2024 pm 12:12 PM

PHPにおけるdefine関数の重要性と役割 1.define関数の基本紹介 PHPにおいて、define関数は定数を定義するための重要な関数であり、定数はプログラムの実行中に値が変化しません。定義関数を使用して定義された定数は、スクリプト全体からアクセスでき、グローバルです。 2. 定義関数の構文 定義関数の基本的な構文は次のとおりです。

PHP 実装フレームワーク: Zend Framework 入門チュートリアル PHP 実装フレームワーク: Zend Framework 入門チュートリアル Jun 19, 2023 am 08:09 AM

PHP 実装フレームワーク: ZendFramework 入門チュートリアル ZendFramework は、PHP によって開発されたオープン ソースの Web サイト フレームワークであり、現在 ZendTechnologies によって保守されています。ZendFramework は、MVC デザイン パターンを採用し、Web2.0 アプリケーションと Web サーブの実装に役立つ一連の再利用可能なコード ライブラリを提供します。 。 ZendFramework は PHP 開発者に非常に人気があり、尊敬されており、幅広い機能を備えています。

Zend Framework でのアクセス許可制御に ACL (アクセス コントロール リスト) を使用する方法 Zend Framework でのアクセス許可制御に ACL (アクセス コントロール リスト) を使用する方法 Jul 29, 2023 am 09:24 AM

Zend Framework でのアクセス許可制御に ACL (AccessControlList) を使用する方法 はじめに: Web アプリケーションでは、アクセス許可制御は重要な機能です。これにより、ユーザーはアクセスを許可されたページと機能にのみアクセスできるようになり、不正アクセスが防止されます。 Zend フレームワークは、ACL (AccessControlList) コンポーネントを使用してアクセス許可制御を実装する便利な方法を提供します。この記事では、Zend Framework で ACL を使用する方法を紹介します。

PHP は変数をどのように保存するのでしょうか? zval構造を理解していますか? PHP は変数をどのように保存するのでしょうか? zval構造を理解していますか? May 26, 2022 am 09:47 AM

PHP で変数を定義するときに型を宣言する必要はありません。最初に変数 $a に整数値を代入し、後で他の型に簡単に変更できます。では、この変数 $a は PHP ソース コードにどのように格納されるのでしょうか?この疑問を念頭に置いて、PHP のソース コードを見てみましょう。

定義条件付きコンパイルの定義方法 定義条件付きコンパイルの定義方法 Oct 11, 2023 pm 01:20 PM

`#ifdef`、`#ifndef`、`#if`、`#elif`、`#else`、および `#endif` 前処理ディレクティブを使用して、define条件付きコンパイルを実行できます。

関数マクロの使用法を定義する 関数マクロの使用法を定義する Oct 11, 2023 pm 12:00 PM

定義関数マクロの使用法: 1. 単純な計算マクロ「#define SQUARE(x) ((x) * (x))」を定義します; 2. 複数のパラメータを持つマクロを定義します「#define MAX(a , b ) ((a) > (b) ? (a) : (b))"; 3. 複雑な式を使用してマクロを定義します。「#define ABS(x) ((x) < 0 ? -(x ) : (x)」 )」。

typedefとdefineの違い typedefとdefineの違い Sep 26, 2023 am 10:41 AM

typedef と define の違いは、型チェック、スコープ、可読性、エラー処理、メモリ使用量などにあります。詳細な紹介: 1. 型チェック、typedef で定義された型エイリアスは実際の型であり、型チェックが実行されますが、define で定義されたマクロは単なる単純なテキスト置換であり、型チェックは実行されません; 2. スコープ、typedef によって定義された型エイリアス のスコープはローカルであり、現在のスコープ内でのみ有効ですが、define によって定義されたマクロはグローバルであり、どこでも使用できます; 3. 可読性など。

See all articles