经过xdebug来分析PHP引用
通过xdebug来分析PHP引用
一直没搞懂php的引用,今天面试的时候又碰到了,借助xdebug貌似理解了一点,记录一下。
?
code1:
?
$a = "xiaoshenge";$b = &$a;unset($b);echo "b=$b";echo "a=$a";
结果:b=a=xiaoshenge
?
code2:
$a = "xiaoshenge";$b = &$a;unset($a);echo "b=$b";echo "a=$a";
结果:b=xiaoshengea=??
?
猜测:
?
面试的时候是code1,由于没搞懂PHP的引用当时就猜测的写了b=a=,其实这与我把引用跟c里面的指针搞混了有关。回来之后,调试了一下code2,然后彻底迷惑了,于是求救与PHP文档。
?
PHP文档中对于引用的介绍:
?
?
引用是什么:在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的 hardlink。
?
取消引用:当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如:
?
<?php $a = 1;$b =& $a;unset($a);?>
?不会 unset?$b,只是?$a。再拿这个和 Unix 的?unlink?调用来类比一下可能有助于理解。
?
推断:
?
文档里面有介绍”引用可以被当作是unix文件系统中的hardlink“,参考http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=150986?中的介绍:
硬连接是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中[color=red]任意一个[/color]其余的文件将不受影响。?
软连接也叫符号连接,他只是对源文件在新的位置建立一个“快捷(借用一下wondows常用词)”,所以,当源文件删除时,符号连接的文件将成为无源之水->仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。?
?
通过xdebug来看zval容器中的变化:
?
code1:
?
$a = "xiaoshenge";$b = &$a;xdebug_debug_zval( 'a' );xdebug_debug_zval( 'b' );unset($b);xdebug_debug_zval( 'a' );xdebug_debug_zval( 'b' );
结果:
?
a:
<em>(refcount=2, is_ref=1)</em>,<small>string</small> <span style="color: #cc0000;">'xiaoshenge'</span> <em>(length=10)</em>
b:
<em>(refcount=2, is_ref=1)</em>,<small>string</small> <span style="color: #cc0000;">'xiaoshenge'</span> <em>(length=10)</em>
a:
<em>(refcount=1, is_ref=0)</em>,<small>string</small> <span style="color: #cc0000;">'xiaoshenge'</span> <em>(length=10)</em>
?
code2:
?
$a = "xiaoshenge";$b = &$a;xdebug_debug_zval( 'a' );xdebug_debug_zval( 'b' );unset($a);xdebug_debug_zval( 'a' );xdebug_debug_zval( 'b' );
?结果:
a:
<em>(refcount=2, is_ref=1)</em>,<small>string</small> <span style="color: #cc0000;">'xiaoshenge'</span> <em>(length=10)</em>
b:
<em>(refcount=2, is_ref=1)</em>,<small>string</small> <span style="color: #cc0000;">'xiaoshenge'</span> <em>(length=10)</em>
b:
<em>(refcount=1, is_ref=0)</em>,<small>string</small> <span style="color: #cc0000;">'xiaoshenge'</span> <em>(length=10)</em>
?
?
结合unix的硬链接来看(应该如下):
unset($a),只是销毁了a-x部分所以$b还在。
?
$b=&$b,不是指针那样,$b指向$a,(指针,貌似我的C都还给书了,要补习了)
?
面试感受:不能人云亦云,要自己动手,自己思考。PHP手册不能轻视,这个问题文档里面有。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









Springboot プロジェクトは初めてです (1) ブレークポイントのデバッグが効果がないことがわかり、非常に落ち込んで、オンラインで解決策を探しました。私が目にしたのは、リモート デバッグであると言われているいくつかの非常に複雑なソリューションだけでしたが、追加の冒頭のスローガンも必要でした。これは従来のプロジェクトとは異なるので、必要ないと思います。そこでいろいろ調べてみたところ、もっと簡単な方法があることが分かりました 手順は以下の通りです: pom ファイルのプラグイン部分に設定を追加します: false でOKです; (2) SpringBoot プロジェクトのエラーについて従来の Web プロジェクトには web.xml ファイルが必要ですが、SpringBoot プロジェクトには web.xml ファイルが必要ないため、web.xml ファイルがありません。

はい、XDebug のようなデバッガーは PHP サーバーのパフォーマンスを低下させる可能性があります。これが、デバッガがサーバー環境に配置されない理由です。不要なオーバーヘッドを避けるために、これらは異なる環境にデプロイされます。デバッグ メッセージは、すでに運用されているアプリケーションでは表示できません。デバッグ動作がサーバーに追加されると、デバッグ エンジンが PHP プロセスに接続されます。ブレークポイントで停止するためにメッセージの受信を開始しますが、他のプロセスにパフォーマンスに影響を与え、PHP パーサーを停止する可能性があるため、これは必須の動作ではありません。一方、デバッガーは実稼働環境での使用を目的としていないため、インストールされる場合はサーバーでポートを開く傾向があります。サーバーのポートを開くことは、ハッカーがのぞき見するためのドアを開けるのと同じくらい悪いことです。

デバッグは PHP 開発において避けられない部分です。開発者が独自のコードをより簡単にデバッグできるようにするために、PHP8.0 では、デバッグ ライブラリに非常に便利なツールである Xdebug が導入されました。この記事では、Xdebug の主な機能のいくつかと、Xdebug を使用して PHP デバッグのプロセスを簡素化する方法を紹介します。 Xdebug は、PHP アプリケーションのエラーをキャプチャし、詳細なエラー スタック トレース情報と使用されている変数を提供できるオープン ソースのデバッグ ツールです。開発者がコードを検出してトラブルシューティングを行うのに役立ちます

ThinkPHP6 は、開発をより便利にするためにさまざまなテクノロジーを使用する人気のある PHP フレームワークです。そのようなテクノロジーの 1 つは、Xdebug などのデバッグ ツールです。この記事では、ThinkPHP6 でのデバッグに Xdebug を使用する方法を説明します。 Xdebug のインストールと構成 Xdebug の使用を開始する前に、まず Xdebug をインストールして有効にする必要があります。 php.ini ファイルに次の設定を追加できます: [xdebug]zend_extension=x

PHP は、Web 開発で広く使用されているプログラミング言語です。 PHP 開発ツールの場合、適切なツールを選択することで、開発者の作業をより効率的かつ便利にすることができます。この記事では、統合開発環境 (IDE)、テキスト エディター、デバッグ ツールなど、いくつかの一般的な PHP 開発ツールについて説明します。 1. 統合開発環境 (IDE) PhpStorm PhpStorm は、JetBrains によって開発された強力な PHP 開発環境です。 PHをサポートするだけではありません

効率的なデバッグとパフォーマンスの最適化のために PHP 拡張機能 XDebug を使用する方法 PHP アプリケーションを開発およびデバッグするとき、不正な呼び出し、非効率的なコード、パフォーマンスのボトルネックなど、さまざまな問題に遭遇することがよくあります。 XDebug は、これらの問題を迅速に特定、デバッグ、最適化するのに役立つ強力な PHP 拡張機能です。この記事では、XDebug を使用して効率的なデバッグとパフォーマンスの最適化を行う方法を紹介し、いくつかのコード例を示します。 XDebug のインストールと構成 まず、XDebug をインストールする必要があります

Vscode を使用して Node などのプロジェクトを作成したことのある友人は皆、問題のトラブルシューティングを行う場合、問題がどこにあるかを確認するために console.log を通じて出力することを知っています。関係する問題がより複雑な場合は、Through Vscode を選択します。 ...

1. PHP サーバーの最適化の概要 PHP サーバーの最適化とは、サーバー構成の調整、PHP コードの最適化、キャッシュの使用によって PHP サーバーのパフォーマンスと安定性を向上させることを指します。一般的な最適化方法は次のとおりです。 1. PHP コードの最適化 PHP コードの最適化は、PHP サーバーのパフォーマンスを向上させる最も直接的な方法の 1 つです。 PHP コードを最適化する方法には、以下が含まれます。 より高速なアルゴリズムとデータ構造を使用して不必要なデータベース クエリを回避し、キャッシュ手法を再利用してパフォーマンスを向上させる コード分析ツールを使用してパフォーマンスのボトルネックを見つける 2. PHP サーバー構成を最適化する PHP サーバー構成を最適化すると、パフォーマンスも向上します PHP サーバーのパフォーマンスも向上しますそして安定性。 PHP サーバー構成を最適化する方法には、PHP メモリ制限の増加、PHP プロセス数の調整、および最適化などがあります。
