PHP引用の詳細説明、PHP引用の詳細説明
引用とは
PHP でのクォートとは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは C ポインターとは異なり、参照はシンボル テーブルのエイリアスです。 PHP では変数名と変数の内容が異なるため、同じ内容でも異なる名前が付けられることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システムのハードリンクと考えることができます。
引用符をどうするか
PHP の参照では、2 つの変数が同じコンテンツを指すことができます。つまり、これを行うとき:
$a =& $b;
?>
これは、$a と $b が同じ変数を指していることを意味します。
注:
$a と $b はここではまったく同じです。$a が $b を指しているわけではなく、$a と $b が同じ場所を指しているということです。
注:
参照を持つ配列がコピーされた場合、その値は逆参照されません。配列値を関数に渡す場合も同様です。
注:
未定義の変数が参照によって割り当てられた場合、参照パラメータによって渡された場合、または参照によって返された場合、変数は自動的に作成されます。
例 #1 未定義の変数への参照を使用する
関数 foo(&$var) { }
foo($a); // $a が「作成」され、null に割り当てられます
$b = 配列();
foo($b['b']);
var_dump(array_key_exists('b', $b)) // bool(true)
; $c = 新しい StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')) // bool(true)
; ?>
同じ構文は、参照を返す関数と new 演算子 (PHP 4.0.4 以降) で使用できます。
$foo =& find_var($bar);
?>
注:
& 演算子を使用しないと、オブジェクトのコピーが生成されます。クラスで $this を使用すると、そのクラスの現在のインスタンスに適用されます。 & なしの代入はインスタンス (オブジェクトなど) をコピーし、$this はそのコピーに作用しますが、必ずしも望ましい結果になるとは限りません。パフォーマンスとメモリ消費の問題のため、通常は 1 つのインスタンスのみで作業する必要があります。
@new などの @ 演算子を使用してコンストラクター内のエラー メッセージを抑制することは可能ですが、これは &new ステートメントを使用する場合には効果がありません。これは Zend エンジンの制限であり、解析エラーが発生します。
警告
関数内でグローバルとして宣言された変数に参照が割り当てられている場合、その参照は関数内でのみ表示されます。これは、$GLOBALS 配列を使用することで回避できます。例 #2 関数内でグローバル変数を参照する
$var2 = "";
関数 global_references($use_globals)
{
グローバル $var1、$var2;
If (!$use_globals) {
$var2 =& $var1; // 関数内でのみ表示されます
} その他 {
$GLOBALS["var2"] =& $var1; // グローバルコンテキストでも表示可能
}
}
global_references(false);
echo "var2 は '$var2'n に設定されます" // var2 は ''
に設定されます global_references(true);
echo "var2 は '$var2'n に設定されます"; // var2 は 'サンプル変数' に設定されます
?>
注:
例 #3 引用符と foreach ステートメント
$row =& $ref;
foreach (array(1, 2, 3) as $row) {
// 何かをしてください
}
echo $ref; // 3 - 反復された配列の最後の要素
?>
関数 foo(&$var)
{
$var++;
}
$a=5;
foo($a);
?>
は$aを6に変換します。これは、関数 foo で変数 $var が $a が指すものと同じものを指しているためです。詳細な説明については、「参照による受け渡し」を参照してください。
参照が行う 3 番目のことは、参照を返すことです。
引用とは何ですか
前に述べたように、参照はポインタではありません。これは、次の構造では望ましい効果が得られないことを意味します:
関数 foo(&$var)
{
$var =& $GLOBALS["baz"];
}
foo($bar);
?>
これにより、関数の呼び出し時に foo 関数の $var 変数が $bar にバインドされますが、その後 $GLOBALS["baz"] に再バインドされます。関数 foo には変数 $bar が存在しないため ($var として表されますが、$var には変数の内容のみが含まれ、呼び出しはありません)、参照メカニズムを通じて関数呼び出しスコープ内の別の変数に $bar をバインドすることはできません。シンボル テーブルの名前と値のバインディング)。参照リターンを使用して、関数によって選択された変数を参照できます。
参照渡し
関数がその引数の値を変更できるように、参照によって変数を関数に渡すことができます。構文は次のとおりです:
関数 foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// ここで $a は 6 です
?>
関数呼び出しには参照シンボルはなく、関数定義のみにあることに注意してください。パラメーターを参照によって正しく渡すには、関数定義だけで十分です。最近のバージョンの PHP では、foo(&$a); で & を使用すると、「呼び出し時参照渡し」が非推奨であるという警告が表示されます。
以下は参照によって渡すことができます:
foo($a) などの変数
新しいステートメント (foo(new foobar()) など)
関数から返される参照。例:
関数&bar()
{
$a = 5;
$a を返します;
}
foo(bar());
?>
詳細な説明については、リファレンスリターンを参照してください。
他の式は参照渡しできず、結果は未定義です。たとえば、次の参照渡しの例は無効です:
function bar() // 欠落している &
に注意してください {
$a = 5;
$a を返します;
}
foo(bar()); // PHP 5.0.5 以降、致命的なエラーが発生します
foo($a = 5) //変数ではなく式
foo(5) // 致命的なエラーが発生します
?>
これらの条件は、PHP 4.0.4 以降のバージョンで利用できます。
参照による返却
参照リターンは、関数を使用して参照をバインドする必要がある変数を検索する場合に使用します。パフォーマンスを向上させるために戻り参照を使用しないでください。エンジンはそれ自体を最適化するのに十分な機能を備えています。正当な技術的理由がある場合にのみ参照を返してください。参照を返すには、次の構文を使用します:
クラス foo {
パブリック $value = 42;
パブリック関数 &getValue() {
return $this->value;
}
}
$obj = 新しい foo;
$myValue = &$obj->getValue(); // $myValue は $obj->value への参照です。
$obj->value = 2;
echo $myValue; // $obj->value の新しい値、つまり 2 を出力します。 ?>
注: パラメーターの受け渡しとは異なり、ここでは両方の場所でアンパサンドを使用する必要があります。これは、通常のコピーではなく参照が返されることを示し、また $myValue が通常の割り当てではなく参照としてバインドされていることを示します。
注: return ($this->value); のような関数から参照を返そうとした場合、参照される変数ではなく式の結果を返そうとしているため、これは機能しません。参照変数を返すことができるのは関数からのみであり、他に方法はありません。コードが動的式または new 演算子の結果を返そうとすると、PHP 4.4.0 および PHP 5.1.0 以降では E_NOTICE エラーが発行されます。
関数&test(){
static $b=0;//静的変数を宣言します
$b=$b+1; $b をエコーします。 $b を返します
}
$a=test();//このステートメントは $b の値を 1 として出力します
$a=5; $a=test();//このステートメントは $b の値を 2 として出力します
$a=&test();//このステートメントは $b の値を 3 として出力します
$a=5; $a=test();//このステートメントは $b の値を 6
として出力します ?>
参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:
$b =& $a;
unset($a);
?>
これと Unix のリンク解除呼び出しを類推すると、理解が容易になるかもしれません。
引用の位置づけ
多くの PHP 構文構造は参照メカニズムを通じて実装されているため、参照バインディングに関する上記の内容はすべてこれらの構造にも当てはまります。参照渡しや戻りなどの一部の構造については、すでに上で説明しました。参照を使用する他の構造は次のとおりです:
global $var で変数を宣言すると、実際にはグローバル変数への参照が作成されます。それはこれを行うのと同じです:
?>
unset($a) と $a=null を使用した結果は異なります。メモリのブロックに $a のマッピングが 1 つだけある場合、unset($a) は $a=null と同等になり、メモリのブロックに $a のマッピングが 2 つある場合は自動的にリサイクルされます。 $a と $b を組み合わせた場合、 unset($a) を実行すると $a=null が発生し、 $b は変更されず、 $a=null を実行すると $a=$b=null が発生します。
理由: 変数に null を代入すると、その変数に対応するメモリ ブロックの参照カウントが直接 0 に設定され、自動的にリサイクルされます。
$これ
オブジェクト メソッドでは、$this は常に、それを呼び出すオブジェクトへの参照になります。
プログラムが比較的大きく、同じオブジェクトを参照する変数が多数あり、使用後にオブジェクトを手動でクリアしたい場合は、個人的には "&" メソッドを使用し、その後 $var=null を使用してオブジェクトをクリアすることをお勧めします。それ以外の場合は、デフォルトのメソッドである php5 を使用してください。また、php5 で大きな配列を転送する場合は、メモリ領域を節約できるため、「&」メソッドを使用することをお勧めします。
ここでもう 1 つの小さなエピソードを紹介します。PHP のアドレスのポインティング (ポインタに似た) 関数は、ユーザー自身によって実装されるのではなく、PHP の参照は「コピー オン ライト」の原則を採用しています。つまり、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。
平たく言うと
1: 次のコードがある場合
$b=$a;
?>
実際、この時点では、$a と $b が異なるメモリを占有するのではなく、両方とも同じメモリ アドレスを指します。
2: 上記のコードに以下のコードを追加すると
上記はすべて PHP の引用に関するものです。皆さんに気に入っていただければ幸いです。
http://www.bkjia.com/PHPjc/959104.html

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

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