目次
phpの参照カウントと変数参照
ホームページ バックエンド開発 PHPチュートリアル PHP の参照カウントと変数 Reference_PHP チュートリアル

PHP の参照カウントと変数 Reference_PHP チュートリアル

Jul 12, 2016 am 09:08 AM
変数

phpの参照カウントと変数参照

各 php5.5 変数は、zval と呼ばれる変数コンテナーに保存されます。
zval 変数コンテナには、変数の型と値に加えて、2 バイトの追加情報も含まれます:
1. 1つ目はbool型の「is_ref」で、この変数が参照セット(参照セット)に属しているかどうかを識別するために使用され、属している場合は値が1、そうでない場合は0になります。
この変数を使用すると、phpエンジンは通常の変数と参照変数を区別できます。
2. 2つ目は「refcount」で、このzval変数(シンボル)を指すポイントの数を示すために使用されます。すべてのシンボルにはスコープがあり、メインのスクリプトや関数、メソッドにもスコープがあります。
すべてのシンボルはシンボルテーブルに存在します。
変数に定数値が割り当てられると、次の例のように zval 変数コンテナが生成されます。
$a = "Hello world";
?>
このとき、以下のプログラムを実行して、zvalコンテナ内のis_refとrefcountの値を指す$a変数を取得します
$a = "Hello world";
print_r(xdebug_debug_zval('a'));
?>
a: (refcount=1, is_ref=0)='Hello world'
次に、参照代入と通常代入を調べるために次の実験を行います。
まず、$b が $a を指すようにし、次のように is_ref、refcount を確認します。
$a = "こんにちは"
;
$b = $a;
print_r(xdebug_debug_zval('a'));
print_r(xdebug_debug_zval('b'));
?>
a: (refcount=2, is_ref=0)='Hello world'
b: (refcount=2, is_ref=0)='Hello world'
$b が $a を参照するようにし、is_ref refcount を確認します。以下のように
$a = "こんにちは"
;
$b = &$a;
print_r(xdebug_debug_zval('a'));
print_r(xdebug_debug_zval('b'));
?>
a: (refcount=2, is_ref=1)='Hello world'
b: (refcount=2, is_ref=1)='Hello world'
上記のことから、変数が対応する zval コンテナを参照する場合、is_ref は 1 であることが分析できます。
さらに分析して、次のように $b を $a に参照し、$c は $a を指します
リーリー

印刷結果は以下の通りです
a: (refcount=2, is_ref=1)='Hello world'
b: (refcount=2, is_ref=1)='Hello world'
c: (refcount=1, is_ref=0)='Hello world'
この時点で、php5.5エンジンは$cのzvalコンテナを再構築していることがわかります。コンテナ内のデータ型と値は、$aが指すコンテナ内のデータ型と値とまったく同じです。 refcount と is_ref の値です。
したがって、php5.5 の zval コンテナ内の is_ref 変数は、参照コレクションまたは通常のコレクションのいずれかを識別し、両方が存在する場合、競合の問題を解決するために zval コンテナを複製することがわかります。
概要:
1. PHP5.5以降、「変数の割り当て」とはポイントの割り当て、つまり変数が特定のzvalコンテナを指すことを指します。
2.「変数参照」は、変数と変数をバインドします。バインドされた変数の 1 つが方向を変えると、相互にバインドされている他の変数の方向も変わります。
変数が変数を再参照すると、元の変数のバインドが解放され、代わりに新しい変数がバインドされます。次のコード:
リーリー

これにより、関数の呼び出し時に foo 関数内の $var 変数が $bar にバインドされますが、その後 $GLOBALS["baz"] に再バインドされます。関数 foo には変数 $bar が存在しないため ($var として表されますが、$var には変数の内容のみが含まれ、呼び出しはありません)、参照メカニズムを通じて関数呼び出しスコープ内の別の変数に $bar をバインドすることはできません。シンボル テーブルの名前と値のバインディング)。参照リターンを使用して、関数によって選択された変数を参照できます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1053350.html技術記事 PHP の参照カウントと変数参照 各 PHP5.5 変数は、zval と呼ばれる変数コンテナーに保存されます。 zval 変数コンテナには、変数の型と値に加えて、2 バイトも含まれます...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Windows 11 および 10 の環境変数をプロファイリングに使用するためのガイド Windows 11 および 10 の環境変数をプロファイリングに使用するためのガイド Nov 01, 2023 pm 08:13 PM

環境変数は、アプリケーションやプログラムが実行される場所 (または環境) へのパスです。ユーザーはこれらを作成、編集、管理、削除でき、特定のプロセスの動作を管理する場合に便利です。ここでは、Windows で複数の変数を個別に編集することなく、複数の変数を同時に管理するための構成ファイルを作成する方法を説明します。環境変数でプロファイルを使用する方法 Windows 11 および 10 Windows には、ユーザー変数 (現在のユーザーに適用) とシステム変数 (グローバルに適用) の 2 つの環境変数セットがあります。ただし、PowerToys などのツールを使用すると、別の構成ファイルを作成して新しい変数と既存の変数を追加し、それらをすべて一度に管理できます。方法は次のとおりです: ステップ 1: PowerToysPowerTo をインストールする

PHP7 の変数の厳密モード: 潜在的なバグを減らすには? PHP7 の変数の厳密モード: 潜在的なバグを減らすには? Oct 19, 2023 am 10:01 AM

PHP7 では Strict モードが導入され、開発者が潜在的なエラーを減らすのに役立ちます。この記事では、厳密モードとは何か、および PHP7 で厳密モードを使用してエラーを減らす方法について説明します。同時に、コード例を通じて厳密モードの適用を示します。 1.ストリクトモードとは何ですか? Strict モードは、開発者がより標準化されたコードを作成し、いくつかの一般的なエラーを減らすのに役立つ PHP7 の機能です。厳密モードでは、変数宣言、型チェック、関数呼び出しなどに厳密な制限と検出が行われます。合格

Javaのインスタンス変数とは何ですか Javaのインスタンス変数とは何ですか Feb 19, 2024 pm 07:55 PM

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

PHP 関数の紹介 - is_string(): 変数が文字列かどうかを確認する PHP 関数の紹介 - is_string(): 変数が文字列かどうかを確認する Jul 24, 2023 pm 09:33 PM

PHP 関数の紹介 - strpos(): 変数が文字列であるかどうかを確認する PHP では、is_string() は変数が文字列であるかどうかを確認するために使用される非常に便利な関数です。変数が文字列であるかどうかを判断する必要がある場合、 is_string() 関数を使用すると、この目標を簡単に達成できます。以下では、is_string() 関数の使用方法を学び、関連するコード例をいくつか示します。 is_string() 関数の構文は非常に単純です。必要なのはそれだけです

Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Mar 09, 2024 pm 05:36 PM

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

Python 構文のマインド マップ: コード構造の深い理解 Python 構文のマインド マップ: コード構造の深い理解 Feb 21, 2024 am 09:00 AM

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

内部エラー: 一時ディレクトリを作成できません [解決済み] 内部エラー: 一時ディレクトリを作成できません [解決済み] Apr 17, 2023 pm 03:04 PM

Windows システムでは、ユーザーは実行可能ファイル/セットアップ ファイルを使用してさまざまな種類のアプリケーションをシステムにインストールできます。最近、多くの Windows ユーザーが、実行可能ファイルを使用してアプリケーションをインストールしようとすると、システム上で INTERNALERROR:cannotCreateTemporaryDirectory というエラーが表示されると苦情を言い始めています。この問題はこれに限定されず、Windows システムにインストールされている既存のアプリケーションをユーザーが起動することもできなくなります。考えられる理由のいくつかを以下に示します。管理者権限を付与せずに実行可能ファイルを実行してインストールします。 TMP 変数に無効なパス、または異なるパスが指定されました。破損したシステム

C言語で変数のライフサイクルを説明する C言語で変数のライフサイクルを説明する Sep 02, 2023 pm 07:37 PM

ストレージ クラスは、変数のスコープ、有効期間、バインドを指定します。変数を完全に定義するには、その「型」だけでなく、そのストレージ クラスについても言及する必要があります。変数名は、変数の値を格納するためにビットのセットが割り当てられるコンピュータ メモリ内の物理的な場所を識別します。ストレージ クラスは次の要素を示します - 変数はどこに格納されているか (メモリまたは CPU レジスタ内)?初期化されていない場合、変数の初期値は何ですか?変数のスコープ(変数にアクセスできる範囲)とは何ですか?変数のライフサイクルとは何ですか?ライフタイム変数のライフタイムは、コンピュータがメモリを割り当てる期間 (メモリの割り当てから割り当て解除までの期間) を定義します。 C 言語では、変数に自動、静的、または動的ライフサイクルを持たせることができます。自動 - 自動でライフサイクルを作成します

See all articles