PHPにおける変数参照と変数破壊機構の解析、PHP破壊
この記事では、PHP の変数参照と変数破棄のメカニズムを例とともに分析します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
変数は PHP において非常に重要な型です。すべてのデータは変数または定数を介して操作されます。変数の参照と変数の破棄を見てみましょう。
phpでは、記号「&」は参照を表します。
1. 引用なしで状況を見てみましょう:
$b = $a;//このステップでは、「$b= & $a」のように $a の前に記号 & を追加しません。 & を追加しない場合、実際の原理は変数 $a のコピーを作成することです。つまり、変数 $b を格納するために新しいアドレスがメモリに適用されます
ps: PHP では、「=」を使用して値を直接代入すると、実際には右側の変数のコピーが b にコピーされることになり、メモリ領域が生成されます。その結果、同じ内容が 2 つのコピーに格納される可能性があります。メモリ。 PHP パフォーマンスのいくつかの側面で述べたように、これにより多くのメモリ領域が占有されます。しかし、私が聞いたところでは、ほとんどの人はこのことにあまり注目していませんでした。実際、このような一般的な適用によって生じる大きな違いは明らかではありません。実際、私は引用に & をあまり使いません (笑)。ただ、実装原理を深く理解することが非常に必要だと思います。私は基本的なことに焦点を当てるのが好きです。
2. 引用には & 記号を使用します
$b = &$a;
参照を使用すると、PHP エンジンは変数をコピーしません。実際、ポインタはメモリ内の $a のアドレスを指し、$b はこのポインタを保存します。
したがって、参照を使用する場合、$b の値を変更すると、それに応じて $a も変更されます
例:
$b = &$a;
$b = "test new value";//b の値を変更すると、a の値も変更されます
echo $a;// b の値を変更すると a の値も変更されるため、テスト用の新しい値を出力します。
関数を定義するときに次のような状況をよく見かけます:
{
//関数定義の内容
$param++;
}
説明: $param の前に参照があるため、渡されたパラメータはメモリにコピーされず、元のメモリ空間を直接参照します。したがって、記号 & を使用して渡された変数値が変更されると、元のメモリ空間の値も変更されます。
以下のクイズに答えてください:
テスト($k);
echo $k;//その結果、関数内で$kの値が変更され、9が出力されました。
次のように呼び出される関数をよく見かけます:
PHP エンジンのメカニズムは次のとおりであることを以前に学びました: = は右側のコンテンツを左側の変数にコピーします。したがって、& を使用するということは、関数の結果をコピーすることを意味し、実際には、ポインタは左側の変数に与えられるということです。
ポインタとは何ですか?私はC言語でその概念を学びました。私の理解では、ポインタ、ポインタ、指示針(コンパス、笑)です。ポインタをメモリのアドレスと考えると理解しやすくなります。コンピュータはメモリ内のデータの場所を認識します。これは表面的な理解なので、深く理解する方法はわかりません(笑)。
概要: 参照を使用すると、メモリ リソースの使用量が削減されます。
PHPマニュアルの引用符の説明は以下の通りです:
PHP でのクォートとは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは C ポインターとは異なり、参照はシンボル テーブルのエイリアスです。 PHP では変数名と変数の内容が異なるため、同じ内容でも異なる名前が付けられることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システムのハードリンクと考えることができます。
3. 変数を破棄するとき。元の値は変わりません。
実験: $b = & $a;
$b の値が変更されるため、$a の値も変更されます。$b が破棄されると (メモリ内にスペースが存在せず、null ではなく、値が "" になります)、$a の値も変更されます。削除するのはどうですか?
実は、この仕組みについて具体的に言及しているPHPの洋書があります。 2年前に見たよ。よく覚えていない。原則として、変数が削除されると自動的にコピーされます。
実際、これは $b を削除して $a を削除するという問題が発生するのを避けるためです。
$b = & $a;
$b = 8;//引用符で囲まれているのでbの値が変更され、aの値も8に変更されます。
var_dump($b,$a);
unset($b);// unset を呼び出して変数 b を削除します。変数 a は削除されません
var_dump($b,$a);//null と 8 を出力します
$b 変数を削除するために unset を呼び出すと、PHP エンジンは変数シンボル テーブルから次のことを検出しました。削除したい変数 $b はもともと変数 $a を参照していましたが、一度削除すると $a 変数が削除されてしまうため、削除するのは困難でした。がなくなったので、まず $a 変数のコピーを作成してから、$b 変数を削除します。
PHP シンボル テーブルについて: 実際、私の理解では、動作中のすべての変数名がそこに記録され、PHP は、当然のことながら、未使用の変数スペースをリサイクルするためにこのシンボル テーブルを使用します。メモリ領域を解放します)。シンボル テーブルに基づいた PHP のガベージ コレクション メカニズム (使用されなくなったメモリ領域を解放する) を見てみましょう。
例
$$long="PHP"; /* 変数 $long に格納されている文字列を新しい変数の変数名として使用します。これは $big_long_variable_name="PHP" と同等です。 */
$short=& $big_long_variable_name; /* 変数 $big_long_variable_name の値を変数 $short に代入します。このとき、$short の値は $short=& $$long; と同等です。 */
print "01 /$short is $short."; /* "/$" はドル記号 $ が出力されることを示すエスケープシーケンス (以下同様)。このステートメントの機能は、次のように出力することです: 01 $short is PHP. print "02 Long は $big_long_variable_name."; /* 出力: 02 Long は PHP です。 ?>
$big_long_variable_name.=" ロックス!" /* $big_long_variable_name を再割り当てします。再代入処理では、$big_long_variable_name の後に . (ドット) が追加されるため、この時点の変数 $big_long_variable_name の値は、元の値 (「PHP」) + 新しい値 (「rocks!」) になります。 、変数 $big_long_variable_name 現在の完全な値は「PHP Rocks!」です。以下同様。 */
print "03 /$short は $short"; /* 出力:03 $short は PHP です! */
print "04 Long は $big_long_variable_name"; /* 出力: 04 Long は PHP です! */
?>
05 $short は PHP のロックです!
06 ロングは PHP ロックです!
$short.="プログラミング $short"; /* 変数 $short を再割り当てします。 $shortの後には.(ドット)が付加されているので、上記の例を参考に$shortの値を解析してください。 */
print "07 /$short は $short"; /* 出力:07 $short は PHP のプログラミングです! */
print "08 Long is $big_long_variable_name"; /* 変数 $short がプログラミング PHP Rocks! に再割り当てされるため、変数 $big_long_variable_name の値も $short とともに "PHP Rocks! プログラミング PHP Rocks!" に変更されます。このステートメントの出力: 08 Long is PHP rocks! Programming PHP rocks! 同じ値を持つ変数が unset() によって破棄された場合、他の変数はこの状況に当てはまらない、つまり、一緒に破棄されないことに注意してください。 。 */
?>
09 $short は PHP プログラミングの魅力です!
10 長い PHP プログラミングは素晴らしいです!
$big_long_variable_name.="Web プログラミング $short"; /* この時点で、変数 $big_long_variable_name が再割り当てされます。 プログラミング PHP プログラミング PHP ロック!変数 $short の値が変数 $big_long_variable_name と一致するようになりました。分析については、それぞれ注 5 と 10 を参照してください。 */
print "11 /$short は $short"; /* 出力:11 PHP の素晴らしい!PHP のプログラミングが素晴らしい!Web プログラミング PHP の素晴らしい!PHP のプログラミングが素晴らしい! */
print "12 Long は $big_long_variable_name";
?>
unset($big_long_variable_name); /* unset() を使用して変数 $big_long_variable_name を破棄します。変数 $short は影響を受けません。 */
print "13 /$short is $short"; /* 変数 $big_long_variable_name は破棄されますが、$short は影響を受けず、その値は最後に割り当てられた値のままです PHP はすごい!プログラミング PHP はすごい!Web プログラミング PHP はすごい!プログラミング PHPロック*/
print "14 Long is $big_long_variable_name."; /* 変数 $big_long_variable_name は破棄されているため、値がありません。出力: 14 Long は */
です。 雪; ?>
print "15 /$short は $short です。"; /* 出力: 15 $short はノーポイントです */
$short="ノーポイント TEST2 $short"; /* 変数 $short を再割り当てします。 $short の後に「.」が追加されていますが、その最新値「No point TEST1」が引用符で囲まれています。 */
print "16 /$short は $short です。"; /* 出力:16 $short はポイントがありません TEST2 はポイントがありません */
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック









