ホームページ バックエンド開発 PHPの問題 PHPでの参照渡しと値渡しの違い

PHPでの参照渡しと値渡しの違い

Sep 16, 2019 am 11:59 AM
php 値渡し 違い 参照渡し

PHPでの参照渡しと値渡しの違い

値による受け渡し

関数のスコープ内での値の変更は関数の外では無視されます。値による受け渡しでは、 value. 、2 つの変数は 2 つのメモリ アドレスを指します。

$a = 6;
$b = $a; // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a 和 $b 不在一个地址中,更改任意变量的值对对方无影响
$b = 7;
echo $a; // 输出:6

function foo($b){
	echo ++$b;
}
foo($b); // 输出:8   
echo $b; // 输出:7    说明函数内的改变对函数外的值没有影响,因为,当 $b 传入函数内的时候是值传递,
会把值在内存中拷贝一份存入一个新的内存地址中

参照渡し

関数スコープ内の値への変更は、関数の外側にも反映されます。参照渡しとは、変数 メモリ アドレス識別子は内部と外部の変数に渡され、最終的に 2 つの変数は同じメモリ アドレスを指します。

$a = 6;
$b = &$a;
$b = 7;
echo $a; // 输出:7 

function foo(&$c){
	echo ++$c;
}
foo($b); // 输出:8   
echo $b; // 输出:8    说明函数内的改变对函数外的值有影响,因为,当 $b 传入函数内的时候是引用传递,
函数体内的$b和外部的$b实际上是指向同一个内存地址,所以一个改变,另外一个变量的值也会改变
function func(&$arr){
	$arr['a'] = [];
	$arr = &$arr['a'];
	$arr['b'] = '333';
	var_dump($arr);
}

$arr = [
    'a' => '111',
    'b' => '222'
];

func($arr);
var_dump($arr);
/**
# 第一个输出:
array(1) {
  ["b"]=> string(3) "333"
}

# 第二个输出:
array(2) {
  ["a"]=> array(1) {
      ["b"]=> string(3) "333"
  }
  ["b"]=> string(3) "222"
}
*/

上の例は明らかに参照によって渡されていますが、なぜ 2 つの $arr が異なる結果を出力するのでしょうか?
ステップ操作 $arr = &$arr['a']; があるため、このステップの後、関数内の $arr の指すアドレスが変更され、$arr['a'] を指すようになりました。 2 つの印刷物はどれも同じではありません。

注: PHP のオブジェクトのデフォルトの値渡しは、通常、関数本体内で渡すパラメーターを変更する必要がある場合や、外部変数に影響を与える必要がある場合に使用されます。は通常、他のときに使用されます。

推奨チュートリアル: PHP ビデオ チュートリアル

以上がPHPでの参照渡しと値渡しの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPで公開され、私的で、保護されているもの PHPで公開され、私的で、保護されているもの Aug 24, 2025 am 03:29 AM

公開メンバーに自由にアクセスできます。 2。プライベートメンバーはクラス内でのみアクセスできます。 3。保護されたメンバーにクラスやサブクラスにアクセスできます。 4.合理的な使用により、コードのセキュリティと保守性が向上します。

PHPで更新クエリを実行する方法 PHPで更新クエリを実行する方法 Aug 24, 2025 am 05:04 AM

MySQLIオブジェクト指向の方法の使用:接続の確立、プリプロセス更新ステートメント、バインドパラメーター、結果を実行して確認し、最終的にリソースを閉じます。 2。MySQLI手順の使用方法:関数を介してデータベースに接続し、ステートメントを準備し、パラメーターをバインドし、更新を実行し、エラーを処理した後に接続を閉じます。 3. PDOを使用:PDOを介してデータベースに接続し、例外モードを設定し、前処理SQLを設定し、パラメーターをバインドし、更新を実行し、トライキャッチを使用して例外を処理し、最終的にリソースをリリースします。常に前処理ステートメントを使用して、SQLインジェクションを防ぎ、ユーザーの入力を検証し、時間内に接続を密接にしてください。

OKBコインの登場の理由は何ですか? OKBコインのサージの背後にある戦略的駆動要因の詳細な説明 OKBコインの登場の理由は何ですか? OKBコインのサージの背後にある戦略的駆動要因の詳細な説明 Aug 29, 2025 pm 03:33 PM

ディレクトリのOKBコインは何ですか? OKXトランザクションと何の関係がありますか? OKB通貨使用供給ドライバー:トークン経済学の戦略的ドライバー:XlayerアップグレードOKBおよびBNB戦略比較リスク分析の概要2025年8月、OKX ExchangeのトークンOKBは歴史的な台頭を導きました。 OKBは2025年に新しいピークに達し、わずか1週間で400%以上増加し、250ドルを突破しました。しかし、これは偶発的な急増ではありません。これは、OKXチームのトークンモデルと長期戦略の思慮深い変化を反映しています。 OKBコインとは何ですか? OKXトランザクションと何の関係がありますか? OKBはOKブロックチェーンファンデーションです

利用可能なタイムゾーンをリストする方法 利用可能なタイムゾーンをリストする方法 Aug 24, 2025 am 12:04 AM

システムでサポートされているゾーンを表示するには、さまざまなプラットフォームに従って次の方法を採用できます。1。Linux/Macosは、Timedatectllist-TimeZonesコマンドを使用してすべてのタイムゾーンをリストし、Grepでフィルタリングできます。 2。Windowsはコマンドプロンプトを使用してTzutil/LまたはPowerShellを実行してGet-Time-ListAvailableを実行します。 3。Pythonでは、pytz.all_timezonesを介してZoneinfoがサポートするタイムゾーンを取得したり、IANAデータベースにアクセスしたりできます。 4. Javaなどのその他のツールは、Zoneid.getavaibleZoneids()、ノードを使用します

PHPでCSVファイルを読み取る方法は? PHPでCSVファイルを読み取る方法は? Aug 29, 2025 am 08:06 AM

toreadacsvfileinphp、usefopen()topenthefile、fgetcsv()inalooptoreadeachrowasanarray、andfclose()tocloseit; handleheaderswithaseparatefgetcsv()callandspecifeifificifedelimitersassas eded、during inuringproperpathsandutftf-sutftectedectedecteftecteftecteftecteftecteftecteftectectedectedededededededed

通貨サークルのオープン契約とは何ですか? Crypto Futures Tradingで重要なのはなぜですか?この記事の詳細な説明 通貨サークルのオープン契約とは何ですか? Crypto Futures Tradingで重要なのはなぜですか?この記事の詳細な説明 Aug 29, 2025 pm 04:09 PM

暗号通貨先物取引のオープンポジション(OI)は何ですか?オープンポジションが先物取引でどのように機能するかオープンポジションと先物取引ボリューム暗号通貨でのオープンポジションが重要である理由は、オープンポジションを他のテクニカルインジケーターと組み合わせる方法1。相対強度指数(RSI)およびオープンポジション2。 (oi)FAQ1。1。

PHPでカールの使用方法 PHPでカールの使用方法 Aug 24, 2025 am 08:32 AM

curlinphpenablessendinghttprequests、fetchingapidata、anduploadingfiles.initializewithcurl_init()、setoptionslikecurlopt_urlandc urlopt_returntransfer、usecurlopt_postforpostrequests、sendjsonwithproperheaders、handleerrorsviacurl_errno()andhttpcodeswithcur

PHPのISSETと空の違いは何ですか PHPのISSETと空の違いは何ですか Aug 27, 2025 am 08:38 AM

ISSET()checkSifavariableexistsandisnotnull、returningtrueevenforzero、false、またはoremptystringvalues;

See all articles