検索

PHP リファレンス

??? PHP におけるいわゆる参照とは、異なる名前が同じ変数の内容にアクセスすることを意味します。変数、関数、オブジェクトの前にアンパサンドを追加することで、それらの変数、関数、オブジェクトに対して使用できます。参照の種類と機能について詳しく説明します:

?

1. 参照型

1.1. 変数参照: 2 つの変数は同じコンテンツを指します

<?php $a = "abc"; 
  $b = &$a; 
  echo $a;//这里输出:abc 
  echo $b;//这里输出:abc 
  
  $b = "done"; 
  echo $a;//这里$a的值变为done, 所以输出done 
  echo $b;//这里输出done
?> 


1.2. 関数の参照渡し

function test(&$a)
{
	$a=$a+100; 
}

$b=1;

test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值,就可以改变$b的值了 

echo $b;//输出101 
?

ここで test(1); を使用するとエラーが発生するので注意してください

1.3.

?
function &test() 
{
	static $b=0;//申明一个静态变量
	$b=$b+1;
	echo $b;
	return $b;
}

$a=test();//$b的值:1

$a=5;
$a=test();//$b的值:2

$a=&test();//$b的值:3

$a=5;
$a=test();//$b的值:6 
説明は次のとおりです。

???? $a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a に対する変更は関数内の $b に影響しません。一方、$a=&test() を呼び出すと、関数の場合、その機能は $b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所にポイントすることです。これにより、この効果 ($a=&b;) と同等の効果が得られます。 $a の値は $b の値も変更するため、
を実行した後

$a=&test();
$a=5;

これから $b の値は 5 になります

ここでは、関数参照の戻り値を理解しやすくするために静的変数が使用されています。実際、関数参照の戻り値は主にオブジェクト
で使用されます。

?

1.4. オブジェクト参照

?
class testa
{
	var $abc="ABC"; 
}

$b=new testa;
$c = &$b; // or $c = $b;
echo $b->abc;//这里输出ABC 
echo $c->abc;//这里输出ABC 
$b->abc="DEF"; 
echo $c->abc;//这里输出DEF 
上記のコードは PHP5 で実行した結果です

PHP5 では、オブジェクトのコピーは参照によって実現されます。上記の例では、$b=new a; $c=$b; は $c=&$b; と同等です。 PHP5 のデフォルトでは、参照によってオブジェクトを呼び出しますが、オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないことを期待したい場合もあります。 この目的のために、PHP は __clone と呼ばれる特別なメソッドを定義します。



2. 参照の役割

プログラムが比較的大きく、同じオブジェクトを参照する変数が多数あり、使用後にオブジェクトを手動でクリアしたい場合は、個人的には「&」メソッドを使用し、その後 $var=null を使用してオブジェクトをクリアすることをお勧めします。 。それ以外の場合は、php5 のデフォルトのメソッドを使用します。また、php5 で大きな配列を転送する場合は、メモリ領域を節約できるため、「&」メソッドを使用することをお勧めします。




3. 引用符を外します

参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:


?? $a = 1; ?? $b =& $a; ?? 設定を解除します ($a)
?>

$b の設定は解除されず、$a が破棄されるだけです。

もう 1 つの例は、グローバル $var で変数を宣言する場合、グローバル変数への参照が実際に確立されることです。これは、

を実行するのと同じです。 ??? $var =& $GLOBALS["var"]; ?>

これは、たとえば、unset $var ではグローバル変数の設定が解除されないことを意味します。

$this への参照: オブジェクトのメソッドでは、$this は常にそれを呼び出すオブジェクトへの参照になります。

?

追記:

PHP の利点の 1 つは、自動ガベージ コレクション メカニズム (メモリの解放) を活用できることです。つまり、変数を使用した後にメモリを解放するための処理を行う必要はなく、PHP が自動的に実行します。もちろん、必要に応じて unset() 関数を呼び出してメモリを解放することもできますが、通常はこれを行う必要はありません。

ただし、PHP では、次のようなメモリが自動的に解放されない状況が少なくとも 1 つあります:


2 つのオブジェクト間に「親オブジェクト-子オブジェクト」などの相互参照関係がある場合、親オブジェクトで unset() を呼び出しても、(親オブジェクトがガベージであっても) 子オブジェクトで親オブジェクトを参照しているメモリは解放されません。収集された場合はリリースされません)。



このとき、手動で unset() を呼び出しても同様です。詳細については、http://bugs.php.net/bug.php?id=33595 を参照してください。 。

妥協点は unset() 関数のオブジェクトの __destruct() メソッドを呼び出すことです。

?

?

----------------------------------------------- --- - 補足:


PHP のアドレス ポインティング (ポインタに似た) 関数はユーザー自身によって実装されるのではなく、PHP の参照は「書き込み時コピー」の原則を採用しています。つまり、書き込み操作が発生しない限り、参照は行われません。 、同じアドレスを指す変数またはオブジェクトはコピーされません。

平たく言うと
1: 以下のコードがある場合

$a="ABC"; $b=$a;

実際、この時点では、$a と $b が異なるメモリを占有するのではなく、両方とも同じメモリ アドレスを指します

2: 上記のコードに次のコードを追加すると

$a="EFG";

$a と $b が指すメモリ内のデータは書き換える必要があるため、この時点で Zend コアが自動的に判断し、$a の $b 用のデータ コピーを自動的に生成し、メモリの一部を再申請します。保管用に。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Apple iPhone 16 Pro as Leica smartphone: Leica subsidiary confirms camera grip with official Leica appApple iPhone 16 Pro as Leica smartphone: Leica subsidiary confirms camera grip with official Leica appJun 13, 2024 pm 08:52 PM

LeicareleasedtheLeicaLuxcameraappfortheAppleiPhoneafewdaysago.However,theappwasnotdevelopedbyLeica,butbyFjorden.ThecompanyhasbeenknownprimarilyforitscameragripsfortheiPhoneandwasacquiredbyLeicainDecember2023.Fo

Remote 3 universal remote control comes with touchscreen, but without subscription or server obligationRemote 3 universal remote control comes with touchscreen, but without subscription or server obligationJun 14, 2024 am 09:13 AM

SincethedemiseofLogitech'spopularHarmonyremotecontrols,themarketforhigh-qualityuniversalremotecontrolshasbeenfragmentedatbest.UnfoldedCircleaimstoavoidthefateoftheHarmonyUltimatebyeliminatinganyserverobligationsorsubs

Samsung Galaxy S24 Ultra gains E Ink secondary display via inventive protective caseSamsung Galaxy S24 Ultra gains E Ink secondary display via inventive protective caseJun 14, 2024 am 10:44 AM

Anintriguingthird-partycasefortheGalaxyS24Ultra(curr.$1,099.99onAmazon)hasappearedonmarketplaceslikeAliExpress.Astheimagesthroughoutthisarticleshow,thecasehasasimplesiliconeconstruction.However,italsocontainsanEInkd

Electric Ferraris will boast an \'authentic\' growl, claims marketing executiveElectric Ferraris will boast an \'authentic\' growl, claims marketing executiveJun 14, 2024 am 10:26 AM

In2012,theeminentautomotivejournalistJeremyClarksonstatedthattheLamborghiniAventador,whichhewasreviewingatthetime,wouldbeamongthelastcarstofeatureanaturallyaspiratedV12.Morethanadecadelater,V12-poweredsupercarsareal

Light Phone 3 launches with 50% discount, monochrome OLED and minimalist designLight Phone 3 launches with 50% discount, monochrome OLED and minimalist designJun 13, 2024 pm 10:18 PM

WhiletheLightPhone2from2018wasstillequippedwithaneconomicale-inkdisplay,theLightPhone3usesanOLEDdisplaythatcanonlydisplaygrayscale.Thereasonfortheswitchtothe3.92-inchOLEDpanelwithitsresolutionof1,240x1,080isth

Audio-Technica unveils ATH-S300BT wireless headphones with hear-through noise-cancellation, 90 hours battery life, and multipoint pairingAudio-Technica unveils ATH-S300BT wireless headphones with hear-through noise-cancellation, 90 hours battery life, and multipoint pairingJun 14, 2024 am 09:46 AM

Audio-TechnicahasunveiledtheATH-S300BTwirelessheadphoneswithhear-throughnoise-cancellation,multipointpairing,and90hoursofbatterylife.Thenoise-cancellingfeaturehasthreemodes:off,on,andhear-through,whereambientsoundscanbehea

First complete PCIe 7.0 IP solution presented by Synopsys coming to market in 2025 for HPCs and AI supercomputersFirst complete PCIe 7.0 IP solution presented by Synopsys coming to market in 2025 for HPCs and AI supercomputersJun 14, 2024 am 09:19 AM

Backin2022,whenPCIe7.0wasstartingtotakeshapeasafuturestandard,PCIe5.0wasjusthittingtheservermarketsandtheprospectofseeingPCIe6.0devicesavailableanytimesoon,letalonePCIe7.0ones,wasquitefar-fetched.CurrentlyPCIe5

Jabra discontinues Elite wireless earbuds lineupJabra discontinues Elite wireless earbuds lineupJun 14, 2024 am 09:39 AM

TheJabraEliteserieshascometoanend,withGNCEOPeterKarlstromerannouncingthediscontinuationofthewirelessearbudswithinthelineupinapressrelease.Petersaysthatthechangingmarketdynamicsandhowchallengingithasbecometogetas

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

mPDF

mPDF

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール