目次
PHP カーネルの深い理解 (5) 変数とデータ型 - 変数の構造と型、カーネルの深い理解
ホームページ バックエンド開発 PHPチュートリアル PHP カーネルの深い理解 (5) 変数とデータ型 - 変数の構造と型、kernel_PHP チュートリアルの深い理解

PHP カーネルの深い理解 (5) 変数とデータ型 - 変数の構造と型、kernel_PHP チュートリアルの深い理解

Jul 12, 2016 am 08:56 AM
php

PHP カーネルの深い理解 (5) 変数とデータ型 - 変数の構造と型、カーネルの深い理解

元のリンク: http://www.orlion.ga/238/

プログラミング言語の種類は、強い型付けと弱い型付けの2種類に分けられます。PHPは弱い型付け言語ですが、C言語は強い型付け言語です。公式の PHP 実装では、すべての変数が同じデータ構造 (zval) を使用して保存されます。この構造には、変数の値だけでなく、変数の型も含まれます。これは PHP の弱い型付けの中核です。

zval 構造体は弱い型をどのように実装しますか?

1. PHP 変数の型とストレージ構造

変数を宣言して使用する場合、PHP はデータ型を指定する必要はありませんが、PHP には 8 つのデータ型があり、次の 3 つのカテゴリに分類できます。整数、float(double) 文字列; 複合型: 配列、オブジェクト; 特殊な型: リソース、NULL

C 言語は PHP で弱い型付けをどのように実装しますか?

1. 可変ストレージ構造

変数の値は、以下に示すように zval 構造体に格納されます。zval 構造体は Zend/zend.h ファイルで定義されており、その構造は次のとおりです。 リーリー

zval 構造体には 4 つのフィールドがあり、それらの意味は次のとおりです:

属性名refcount_gcis_ref_gc価値タイプ PHP5.3 以降、新しいガベージ コレクション メカニズムが導入されました。それ以前は、参照カウントと参照されるフィールド名は refcount と is_ref でした。
意味 デフォルト値
は参照カウントを意味します 1
参考かどうかを示します 0
変数の値を保存する
変数の特定のタイプ
変数の値は、別の構造体 zvalue_value に保存されます。値の保存については、以下の概要を参照してください。

2. 変数タイプ

zval 構造体の type フィールドは、弱い型指定を実装するための最も重要なフィールドです。 type の値は、IS_NULL、IS_BOOL、IS_LONG、IS_DOUBLE、IS_STRING、IS_OBJECT、IS_RESOURCE のいずれかになります。さらに、それらで定義されるタイプには、IS_CONSTANT および IS_CONSTANT_ARRAY が含まれます。

2. 変数値の保存

前述の変数の値は zvalue_value 共用体に格納され、その構造は次のように定義されます: リーリー

さまざまなタイプのデータは、変数値を格納するために異なるメソッドを使用します。対応する割り当てメソッドは次のとおりです。

一般的なタイプ:

変数型マクロZVAL_BOOLブール/整数変数の値は (zval).value.lval に格納され、その型も 対応するIS_*を使用して保存しますZVAL_LONGZVAL_DOUBLEZVAL_NULLNULL 値を含む変数値を保存する必要はなく、(zval).type を IS_NUL としてマークするだけですZ_TYPE_P(z)=IS_NULL;ZVAL_RESOURCEリソースタイプのストレージは他の一般的な変数と変わりませんが、その初期化とストレージの実装は異なりますZ_TYPE_P(z) = IS_RESOURCE と同じ;
ブール値
になります。

整数
フロート
Z_TYPE_P(z)=IS_BOOL/LONG;Z_LVAL_P(z)=(b)!=0; ヌル

リソース

 

字符串

    字符串的类型标示和其他数据类型一样,不过在存储字符串时多了一个字符串长度的字段。

struct {
    char *val;
    int len;
} str;
ログイン後にコピー

(存储字符串长度是因为字符串的操作十分频繁,有利于节省时间,是空间换时间的做法)

数组Array

数组是PHP中最常用也是最强大变量类型。数组的值存储在zvalue_value.ht字段中,它是一个HashTable类型的数据。PHP数组使用哈希表来存储关联数据。PHP的哈希表实现中使用了两个数据结构HashTable和Bucket。PHP所有的工作都是由哈希表实现。

对象Object

PHP的对象是一种复合型的数据,使用一种zend_object_value的结构体来存放,其定义如下

typedef struct _zend_object_value {
    zend_object_handle handle;  //  unsigned int„类型,EG(objects_store).object_buckets的索引
    zend_object_handlers *handlers;
} zend_object_value;
ログイン後にコピー

PHP的对象只有在运行时才会被创建,前面介绍了EG宏,这是一个全局结构体由于保存在运行时的数据。其中就包括了用来保存所有被创建的对象的对象池,EG(objects_store),而object对象值内容的zend_object_handle域就是当前对象在对象池中所在的索引,handlers字段则是将对象进行操作时的处理函数保存起来。

    

    PHP的弱变量容器的实现方式是兼容并包的形式体现。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1113138.htmlTechArticle深入理解PHP内核(五)变量及数据类型-变量的结构和类型,深入理解内核 原文链接:http://www.orlion.ga/238/ 编程语言的类型可以分为强类型和弱类...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles