PHP の原則 (PHP 内の変数) の深い理解
ご存知かもしれませんし、ご存じないかもしれませんが、PHP は弱い型指定の動的スクリプト言語です。 いわゆる弱い型とは、変数を宣言するときに、PHP が変数の型を厳密に検証しないことを意味します (厳密に言うと、PHP は中程度に強い型の言語です。この部分については今後の記事で説明します)。 、保存するデータのタイプを明示的に指定する必要はありません:
<?php $var = 1; //int $var = "laruence"; //string $var = 1.0002; //float $var = array(); // array $var = new Exception('error'); //object;
動的言語。つまり、PHP の言語構造は実行時に変更できます。たとえば、実行時に必要となるのは、言語の関数テーブルを動的に変更する関数定義ファイルです。
いわゆるスクリプト言語は、PHP が独立して実行されないことを意味します。PHP を実行するには、PHP パーサーが必要です:
/usr/bin/php -f example.php
PHP の実行が次のとおりであることは、前の記事ですでに述べました。 Zend エンジン (ZE、Zend エンジン) を通じて、ZE は C で書かれています。C が厳密に型指定された言語であることは誰もが知っています。つまり、C のすべての変数は、宣言されてから最終的に破棄されるまで 1 つの型しか保存できません。 . データの種類。では、PHP はどのようにして ZE に基づいて弱い型を実装するのでしょうか?
PHP では、すべての変数は構造体 -zval を使用して保存されます。Zend/zend.h では、zval の定義を確認できます:
typedef struct _zval_struct { zvalue_value value; zend_uint refcount; zend_uchar type; zend_uchar is_ref; } zval;
where zvalue_value is trueデータ保存の鍵 PHP は ZE に基づいて弱い型をどのように実装しますか? zvalue_value は共用体であるため、
typedef union _zvalue_value { long lval; double dval; struct { char *val; int len; } str; HashTable *ht; zend_object_value obj; } zvalue_value;
では、この構造体はどのようにして PHP で複数の型を格納するのでしょうか?
PHP の一般的な変数の型は次のとおりです:
1. 整数/浮動小数点/長整数/ブール値など
2. 文字列
3. 配列/連想配列
- ##4. オブジェクト
- 5. リソース
zval.type = IS_LONG;//整形 zval.type = IS_BOOL;//布尔值
zval.type = IS_STRING
zval.value.str
これは次のとおりです。 C 形式の文字列と文字列の長さを格納する構造体でもあります。 配列とオブジェクトの場合、type はそれぞれIS_ARRAY、IS_OBJECT に対応し、対応するものはそれぞれ zval.value.ht と obj## です。 #何が特別なのかというと、リソースです。PHP では、リソースは非常に特別な変数です。データベースハンドル、開いているファイルなど、PHP の組み込み変数タイプに属さない変数はすべて、保存用のリソースとみなされます。ハンドル等。リソースの場合:
type = IS_RESOURCE
この時点で、
zval.value.lval が取得されます。この時点で、lval は整数インジケーターであり、PHP はこのインジケーターを PHP クエリで使用します。 (この部分は今後別記事で紹介します) とりあえず、この時の lval がリソースリストに対応するオフセット値のようだということだけ知っておいてください。 PHP 関連の知識の詳細については、 以上がPHP の原則 (PHP 内の変数) の深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 ZEND_FETCH_RESOURCE(con, type, zval *, default, resource_name, resource_type);

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









nohup の役割と原理の分析 Unix および Unix 系オペレーティング システムでは、nohup はバックグラウンドでコマンドを実行するためによく使用されるコマンドです。ユーザーが現在のセッションを終了したり、ターミナル ウィンドウを閉じたりしても、コマンドはまだ実行され続けています。この記事では、nohup コマンドの機能と原理を詳しく分析します。 1. nohup の役割: バックグラウンドでのコマンドの実行: nohup コマンドを使用すると、ターミナル セッションを終了するユーザーの影響を受けることなく、長時間実行されるコマンドをバックグラウンドで実行し続けることができます。これは実行する必要があります

Struts フレームワークの原理分析と実践的な調査 JavaWeb 開発で一般的に使用される MVC フレームワークとして、Struts フレームワークは優れた設計パターンとスケーラビリティを備えており、エンタープライズ レベルのアプリケーション開発で広く使用されています。この記事では、Struts フレームワークの原理を分析し、読者がフレームワークをよりよく理解して適用できるように、実際のコード例を使用してそれを検討します。 1. Struts フレームワークの原理の分析 1. MVC アーキテクチャ Struts フレームワークは MVC (Model-View-Con) に基づいています。

MyBatis は、さまざまな Java プロジェクトで広く使用されている人気のある Java 永続層フレームワークです。その中でも、バッチ挿入は、データベース操作のパフォーマンスを効果的に向上させることができる一般的な操作です。この記事では、MyBatis でのバッチ挿入の実装原理を深く調査し、特定のコード例を使用して詳細に分析します。 MyBatis でのバッチ挿入 MyBatis では、通常、バッチ挿入操作は動的 SQL を使用して実装されます。複数の挿入値を含む S を構築することによって

Java のインスタンス変数は、メソッドやコンストラクターではなく、クラスで定義された変数を指します。インスタンス変数はメンバー変数とも呼ばれ、クラスの各インスタンスにはインスタンス変数の独自のコピーがあります。インスタンス変数はオブジェクトの作成時に初期化され、その状態はオブジェクトの存続期間全体にわたって保存および維持されます。インスタンス変数定義は通常、クラスの先頭に配置され、パブリック、プライベート、プロテクト、またはデフォルトのアクセス修飾子など、任意のアクセス修飾子を使用して宣言できます。それは私たちがこれをどうしたいかによって決まります

Ajax を使用して PHP メソッドから変数を取得することは、Web 開発では一般的なシナリオであり、Ajax を使用すると、データを更新せずにページを動的に取得できます。この記事では、Ajax を使用して PHP メソッドから変数を取得する方法と、具体的なコード例を紹介します。まず、Ajax リクエストを処理し、必要な変数を返すための PHP ファイルを作成する必要があります。以下は、単純な PHP ファイル getData.php のサンプル コードです。

Pythonはそのシンプルで読みやすい構文から幅広い分野で広く使われています。プログラミングの効率を向上させ、コードがどのように機能するかを深く理解するためには、Python 構文の基本構造をマスターすることが重要です。この目的を達成するために、この記事では、Python 構文のさまざまな側面を詳しく説明した包括的なマインド マップを提供します。変数とデータ型 変数は、Python でデータを保存するために使用されるコンテナです。マインド マップには、整数、浮動小数点数、文字列、ブール値、リストなどの一般的な Python データ型が表示されます。各データ型には独自の特性と操作方法があります。演算子 演算子は、データ型に対してさまざまな操作を実行するために使用されます。マインド マップは、算術演算子、比率など、Python のさまざまな演算子の種類をカバーしています。

Linux システムの RPM (RedHatPackageManager) ツールは、システム ソフトウェア パッケージのインストール、アップグレード、アンインストール、管理を行うための強力なツールです。これは RedHatLinux システムで一般的に使用されるソフトウェア パッケージ管理ツールであり、他の多くの Linux ディストリビューションでも使用されます。 RPM ツールの役割は非常に重要で、システム管理者とユーザーがシステム上のソフトウェア パッケージを簡単に管理できるようになります。 RPM を通じて、ユーザーは新しいソフトウェア パッケージを簡単にインストールし、既存のソフトウェアをアップグレードできます。

MyBatis は優れた永続層フレームワークであり、XML とアノテーションに基づいたデータベース操作をサポートし、シンプルで使いやすく、豊富なプラグイン メカニズムも提供します。その中でも、ページング プラグインは、よく使用されるプラグインの 1 つです。この記事では、MyBatis ページング プラグインの原理を詳しく説明し、具体的なコード例で説明します。 1. ページング プラグインの原理 MyBatis 自体はネイティブ ページング機能を提供しませんが、プラグインを使用してページング クエリを実装できます。ページング プラグインの原理は主に MyBatis を傍受することです
