【PHP学習】PHP7のデータ型
PHP の変数名 → zval、変数値 → zend_value。その変数メモリは参照カウントによって管理されます。PHP7 では、参照カウントは値構造内にあります。
変数タイプ:
ヘッダー ファイルは PHP ソース コード/zend/zend_types.h
:
## に内部的に実装されます。 # PHP は zval 構造体を通じて変数を表し、さまざまな型の変数値は zval に埋め込まれた共用体、つまり zend_value を通じて表されます。## zend_value は共用体であり、そのコードは次のとおりです:
ast 、ptr、zv などの型は、カーネル自体によってのみ使用されます。
文字列:
PHP は文字列用に別の構造体 zend_string を定義します。 zend_value では、str は特定の構造体を指します。
##nTableMask:この値は、次に従ってハッシュ関数で使用されます。キーのハッシュ コード スネーク要素が位置として保存されるときに使用されます。 nTableMask = -nTableSize または nTableMask = ~nTableSize 1.
nNumused, nNumOfElements:配列要素を削除する場合、要素はすぐには配列から削除されません。代わりに、要素の型は IS_UNDEF としてマークされます。これは使用されるだけです。アレイの容量が制限を超えて拡張する必要がある場合にのみ削除されます。
展開がない場合、nNum Used は常に増加するため、その値は有効な要素数ではありません。 nNumOfElements は配列内の有効な要素の数であるため、nNumOfElements ≤ nNum Used になります。
バケット構造体には、要素のキーと値が格納されます。 h はハッシュ コードです。キーが数値 (および数値インデックス) の場合、その値は数値インデックスの値になります。キーが文字列の場合、その値は Time33 アルゴリズムによって計算されたハッシュ値になります。文字列キーに基づいて。 h 値は、要素の格納場所をマップするために使用されます。
配列の実装:
ハッシュ テーブルの順序性を実現するために、PHP のハッシュ テーブルはハッシュ関数と要素の間に要素を追加します。配列. レイヤーマッピングテーブル、このマッピングテーブルも配列であり、サイズは要素を格納する配列と同じです。
中間マッピング テーブルは、実際に格納された順序付けされた配列内の要素の添字を格納します。要素は実際の格納配列に順番に挿入され、その配列の添字はハッシュ関数によってハッシュされた位置に格納されます。新しく追加されたマッピングテーブル。
ハッシュ関数: 要素の保存場所はキーに従ってマッピングされます。通常、モジュロがハッシュ関数として使用されます: key-> ;h %nテーブルサイズ。しかし、PHP は別のアプローチ (nIndex = key->h | nTableMask) を採用しています。
この中間マッピング テーブルは PHP 配列の構造には存在せず、実際には arData と一緒に配置されます。配列が初期化されると、バケットを格納するために使用されるメモリが割り当てられ、同時に uint32_t サイズの同じ量のスペースが割り当てられます。次に、要素の配列が格納されている場所に arData をオフセットします。 中間マッピング テーブルには、arData を介して前方にアクセスできます。
ハッシュの競合: 異なるキー値が同じハッシュ値を計算する可能性があり、ハッシュ テーブルに挿入するときに競合が発生します。 table 要素は 1 つだけ格納できます。
解決策: 競合するバケットをリンク リストに文字列化します。つまり、中間マッピング テーブルは、バケットではなくバケットのリンク リストをマップします。検索する場合は、リンク リストを走査し、キーを 1 つずつ比較して見つける必要があります。ターゲット要素。
HashTable は、arData 配列内で競合する要素の保存場所を記録します。
マッピング値を設定するときに、中間マッピング テーブルに設定する位置が、以前に挿入された要素によって占有されていることがわかりました (値が等しくない)初期化された -1)、既存の値を新しく挿入されたバケット (つまり、c が挿入された後の u2.next=0) に保存し、マッピング テーブル内の値を新しいバケットの保存場所に更新します。 (つまり、マッピング テーブルの値: 2)。
リファレンス:
リファレンスは、C 言語のポインターの概念に似た、他の型を指す構造体です。参照型変数を変更すると、その変更は実際に参照される変数に反映されます。
PHP では、$b = &$a など、& 演算子を通じて参照変数が生成されます。実行中、最初に zend_reference 構造体が & 演算の変数に割り当てられます。この構造体は参照です。 type 構造体。zval が埋め込まれており、この zval の値は元の zval の値を指します。その後、元の zval の型は IS_REFERENCE に変更され、元の zval の値は新しく作成された zend_reference 構造体を指します。
例:
$a = date("Y-m");$b = &$a;
$a は、& までの文字列です。 $a は参照型に変換して $b に割り当てます。変換後、$a の型は IS_STRING から IS_REFERENCE に変わり、$a の値も元の文字列を指す zend_reference 構造体に変換されます。
$a と $b は、実際の値を間接的に指します。
参照を使用する場合は注意が必要です。参照は & を通じてのみ生成でき、代入を通じて渡すことはできません。
上記の例のように、$b が他の変数に割り当てられている場合、新しい変数に渡される値は、参照自体ではなく、実際の参照の値になります。
$a = date("Y-m");$b = &$a;$c = $b; //如果想让$c也引用指向$a/$b引用的值,则:$c = &$b
おすすめコース: PHP ビデオ チュートリアル
以上が【PHP学習】PHP7のデータ型の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック









MySQL データベースでは、通常、性別フィールドは ENUM タイプを使用して保存できます。 ENUM は、定義済みの値のセットから 1 つをフィールドの値として選択できる列挙型です。 ENUM は、性別などの固定的で限定されたオプションを表す場合に適しています。具体的なコード例を見てみましょう。性別を含むユーザー情報を含む「users」というテーブルがあるとします。ここで性別のフィールドを作成したいと思います。テーブル構造は次のように設計できます: CRE

MySQL では、性別フィールドに最も適したデータ型は ENUM 列挙型です。 ENUM 列挙型は、可能な値のセットを定義できるデータ型です。通常、性別には男性と女性の 2 つの値しかないため、性別フィールドは ENUM 型の使用に適しています。次に、具体的なコード例を使用して、MySQL で性別フィールドを作成し、ENUM 列挙型を使用して性別情報を保存する方法を示します。手順は次のとおりです。 まず、MySQL に users という名前のテーブルを作成します。

PHP 7.0 でインストールされているプラグインが表示されない問題を解決するには: プラグインの設定を確認し、プラグインを有効にします。 PHP を再起動して、構成の変更を適用します。プラグイン ファイルの権限をチェックして、それらが正しいことを確認します。不足している依存関係をインストールして、プラグインが適切に機能することを確認します。他のすべての手順が失敗した場合は、PHP を再構築します。他に考えられる原因としては、プラグインのバージョンに互換性がない、間違ったバージョンをロードしている、PHP 構成の問題などが挙げられます。

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

データベース テーブルを設計する場合、適切なデータ型を選択することは、パフォーマンスの最適化とデータ ストレージの効率にとって非常に重要です。 MySQL データベースでは、性別フィールドには通常、男性または女性の 2 つの値しかないため、性別フィールドを保存するデータ型にいわゆる最良の選択はありません。ただし、効率とスペースを節約するために、性別フィールドを保存するのに適切なデータ型を選択できます。 MySQL では、性別フィールドを格納するために最も一般的に使用されるデータ型は列挙型です。列挙型は、フィールドの値を限られたセットに制限できるデータ型です。

PHP サーバー環境の一般的な解決策には、正しい PHP バージョンがインストールされていること、および関連ファイルがモジュール ディレクトリにコピーされていることを確認することが含まれます。 SELinux を一時的または永続的に無効にします。 PHP.ini をチェックして構成し、必要な拡張機能が追加され、正しく設定されていることを確認します。 PHP-FPM サービスを開始または再起動します。 DNS 設定に解決の問題がないか確認してください。

MySQL でのブール型の使用方法の詳細な説明 MySQL は、一般的に使用されるリレーショナル データベース管理システムです。実際のアプリケーションでは、論理的な true と false の値を表すためにブール型を使用する必要があることがよくあります。 MySQL には Boolean 型の表現方法として TINYINT(1) と BOOL の 2 つがあります。この記事では、ブール型の定義、代入、クエリ、変更など、MySQL でのブール型の使用方法を詳細に紹介し、具体的なコード例を示して説明します。 1. ブール型は MySQL で定義されており、次のようにすることができます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...
