検索
ホームページバックエンド開発PHPチュートリアルPHP で関数を定義するとき、関数名の前に「&」記号を追加することは何を意味しますか?

PHP では、& 記号はコピーではなく変数への参照を渡します。参照とは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは、シンボル テーブルのエイリアスである C のポインターとは異なります。 PHP では、変数名と変数の内容が異なるため、同じ内容が異なる名前を持つ可能性があることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システムにおける緊密な接続と考えることができます。

PHP 参照を使用すると、2 つの変数を使用して同じコンテンツを指すことができます。つまり、次のようにすると:

<?php 
$a =&$b 
?>

これは、$a と $b が同じ変数を指すことを意味します。
注: ここで $a と $b はまったく同じです。$a が $b を指しているわけではなく、$a と $b が同じ場所を指しているということです。
同じ構文は、参照を返す関数と新しい 演算子 (PHP 4.0.4 以降) で使用できます:

<?php 
$bar =& new fooclass(); 
$foo =& find_var ($bar); 
?>

注: & 演算子を使用しないと、作成されるオブジェクトのコピーが作成されます。 。クラスで $this を使用すると、そのクラスの現在のインスタンスに適用されます。 & なしの代入はインスタンス (オブジェクトなど) をコピーし、$this はそのコピーに作用しますが、必ずしも望ましい結果になるとは限りません。パフォーマンスとメモリ消費の問題のため、通常は 1 つのインスタンスのみで作業する必要があります。
@new などの @ 演算子を使用して、コンストラクター内の エラー メッセージをオフにすることができますが、これは &new ステートメントを使用する場合には効果がありません。これは Zend エンジンの制限であり、解析エラーが発生します。
参照が行う 2 番目のことは、参照によって変数を渡すことです。これは、関数内にローカル変数を作成し、その変数が呼び出しスコープ内の同じコンテンツを参照することによって実現されます。例:

<?php 
function foo (&$var) { 
$var++; 
} 
$a=5; 
foo ($a); 
?>

は $a を 6 に変換します。これは、関数 foo で変数 $var が $a が指すものと同じものを指しているためです。詳細な説明については、「参照による受け渡し」を参照してください。
参照が行う 3 番目のことは、参照を返すことです。
参照ではないもの
前に述べたように、参照はポインタではありません。これは、次の構造では期待した効果が得られないことを意味します:

<?php 
function foo (&$var){ 
$var =& $GLOBALS["baz"]; 
} 
foo($bar); 
?>

これにより、関数の呼び出し時に foo 関数の $var 変数が $bar にバインドされますが、その後 $GLOBALS [ 「バズ」] 上。関数 foo には変数 $bar が存在しないため ($var として表されますが、$var には変数の内容のみが含まれ、呼び出しはありません)、参照メカニズムを通じて関数呼び出しスコープ内の別の変数に $bar をバインドすることはできません。シンボル テーブルの名前と値のバインディング)。
参照渡し
参照によって変数を関数に渡すことができ、関数がその引数の値を変更できるようになります。構文は次のとおりです。

<?php 
function foo (&$var) { 
$var++; 
} 
$a=5; 
foo ($a); 
// $a is 6 here 
?>

関数呼び出しには参照記号はなく、関数定義のみにあることに注意してください。パラメーターを参照によって正しく渡すには、関数定義だけで十分です。
以下のものは参照によって渡すことができます:
foo($a) などの変数
foo(new foobar()) などの新しいステートメント
関数から返される参照、たとえば:

<?php 
function &bar() { 
$a = 5; 
return $a; 
} 
foo(bar()); 
?>

詳細については、を参照してください。参照により返します。
その他の は参照渡しできず、結果は未定義です。たとえば、次の参照渡しの例は無効です:

<?php 
function bar(){ // Note the missing & 
$a = 5; 
return $a; 
} 
foo(bar()); 
foo($a = 5) // 表达式,不是变量 
foo(5) // 常量,不是变量 
?>

これらの条件は、PHP 4.0.4 以降のバージョンで利用できます。
リファレンスリターン
リファレンスリターンは、関数を使用して参照をバインドする必要がある変数を見つけたい場合に使用されます。参照を返すときは、次の構文を使用します:

<?php 
function &find_var ($param){ 
/* ...code... */ 
return $found_var; 
} 
$foo =& find_var ($bar); 
$foo->x = 2; 
?>

この例では、find_var 関数によって返されるオブジェクトのプロパティはコピーされずに設定されます (トランスレータ: $foo->x = 2; ステートメントを参照)。 、参照構文を使用しないのと同じです。
注: パラメーターの受け渡しとは異なり、ここではアンパサンドを両方の場所で使用する必要があります。これは、通常のコピーではなく参照が返されることを示すためと、$foo が通常のコピーではなく参照としてバインドされていることを示すためです。 。
参照解除
参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:

<?php 
$a = 1; 
$b =& $a; 
unset ($a); 
?>

は $b の設定を解除せず、$a のみを設定解除します。
これと Unix のリンク解除呼び出しを類推すると、理解が容易になるかもしれません。
参照の位置付け
多くの PHP 構文構造は参照メカニズムを通じて実装されるため、参照バインディングに関する上記の内容はすべてこれらの構造にも当てはまります。参照渡しや戻りなどの一部の構造については、すでに上で説明しました。参照を使用するその他の構造は次のとおりです。
グローバル参照
グローバル $var を使用して変数を宣言すると、実際にはグローバル変数への参照が作成されます。それはこれを行うのと同じです:

<?php 
$var =& $GLOBALS["var"]; 
?>

这意味着,例如,unset $var 不会 unset 全局变量。
$this
在一个对象的方法中,$this 永远是调用它的对象的引用。

以上がPHP で関数を定義するとき、関数名の前に「&」記号を追加することは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

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

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

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

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

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール