PHP変数の引用に関する疑問

Jun 13, 2016 pm 12:47 PM
nbsp php unset zval

PHP における変数参照に関する混乱
変数の参照と代入についてはすでによく理解しているつもりでしたが、私の理解を完全に覆す次の問題に遭遇しました

<br />
<?php <br />
  $str = 'WangChuanbo';<br />
  $s = &$str;<br />
  unset($str);<br />
  echo $s,'hello world';<br />
?>
ログイン後にコピー

その結果、$s は出力された後も Wangchuanbo のままで、元の変数はアンロードされ、参照変数には値が残っているのではないでしょうか? ?

php 変数参照
------解決策------------------
張飛の姓は張飛、名は張飛です。イデ
です つまり、張飛と張一徳は同一人物です
張飛を殺したということは、張飛という名前を世界から消しただけで、その人物は未だに張一徳
という肩書きで徘徊している-----解決策---------- -- -----------
参照を設定解除します。これは、変数名と変数の内容の間のバインドを解除するだけです
$s = &$str; php では
を意味します $s と $str はどちらも同じ場所 C
を指します 設定を解除した後、$str は C
を見つけることができません 別の例を挙げてみましょう
シャオ・チャンはシャオ・リーから宝物が海にあると聞きました
シャオ・リーは記憶を失っていますが、シャオ・チャンは宝が海にあることをまだ知っています

C では、参照はメモリアドレスさえも同じであることを意味します
最終的には、これは定数ポインタです
-----解決策---------
単純に
を入れます C のポインタはメモリ内の特定のアドレスを指します
C ポインターにはデータ型の概念があるため、ポインターは操作に参加できます
PHP コードはマシンコードにコンパイルされていないため、メモリ アドレスへのアクセスについての話はありません
確かに、PHP の参照機構は C のポインタとよく似ています。ポインタの操作を除けば、少なくともパフォーマンスはポインタ

と同じです。 ---解決策----- ---------------
まず、変数の設定を解除するときは、PHP のガベージ コレクションのメカニズムを理解する必要があります。記憶から消えるわけではありません! PHP のガベージ コレクションは GC によって行われます。
------解決策---------
お気に入りに追加~~


-----解決策---------
引用:
引用: 参照の設定を解除します。これは、変数名と変数の内容の間のバインドを解除するだけです
$s = &$str; は、PHP では
を意味します。 C では、参照はメモリアドレスさえも同じであることを意味します
……

もちろん、このように理解することに固執する場合は、笑
F ドライブに fff フォルダーがあるので、右クリックして [送る => デスクトップ ショートカット]
次に、名前を aaa に変更し、もう一度実行して、名前を bbb
に変更します。 aaa を開いてその中に txt を作成し、次に bbb を開くとその中に txt が作成されます
そういうことじゃないですか


-----解決策---------
6 階が正しい、そうする必要がある理解する PHP のガベージコレクションメカニズムを理解する必要があります

PHP 変数は C/C とは異なります。PHP 変数は ZVAL 構造体に格納されます。構造体は次のように定義されます。 typedef struct _zval_struct zval;
...
struct _zval_struct {
/* 変数情報 */
zvalue_value 値; /* 値 */
zend_uint refcount__gc; zend_uchar タイプ; /* アクティブなタイプ */
zend_uchar is_ref__gc;
};
zval 構造体には 4 つのフィールドがあり、それらの意味は次のとおりです:

デフォルト値を意味する属性名
refcount__gc は参照カウント 1 を表します
is_ref__gc は参照 0 かどうかを示します
value には変数
の値が格納されます。 type 変数
の特定の型
unset() は変数を直接破棄しません。refcount=0
の場合にのみ、PHP のガベージ コレクション メカニズムによってリサイクルされます。
$a = 10;
xdebug_debug_zval('a'); //出力: a: (refcount=1, is_ref=0)=10
$b = &$a;
xdebug_debug_zval('a'); //出力: a: (refcount=2, is_ref=1)=10
$a = 20;
xdebug_debug_zval('a'); //出力: a: (refcount=2, is_ref=1)=20
unset($b);
xdebug_debug_zval('a'); //出力: a: (refcount=1, is_ref=0)=20




-----解決策--------------------------------

実際、多くの人が引用符を解釈しています。誰もが PHP の基礎となる実装について話したがりますが、実際にはこれは間違っています。
説明は深い原則ではなく、単純な原則に基づいて行う必要があります。そうしないと、ますます混乱してしまいます
C 言語の本では、高レベルの人がまだ理解していないため、ポインタの説明にアセンブリ言語を使用しないのと同じように、低レベルの人はどうやって理解できるのでしょうか
PHP 参照はポインタと同様に動作します。したがって、「ポインタ」と考えて問題ありません 参照を「ポインタ」として扱わないでください

それを理解する別の方法は
です。 ポインタは番地に従って商店街の各店舗に出入りするので、次の店舗がどこにあるのか明確にわかります
引用はお店の看板に従って出入りするので、隣に誰がいるのか分かりません
それ以外は、両者にパフォーマンスの差はありません
-----解決策---------
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

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:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

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

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

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

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

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

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

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

See all articles