ホームページ バックエンド開発 PHPチュートリアル PHP 変数リファレンスとオブジェクトリファレンスの詳細な紹介_PHP チュートリアル

PHP 変数リファレンスとオブジェクトリファレンスの詳細な紹介_PHP チュートリアル

Jul 13, 2016 pm 05:00 PM
php そして もの 導入 について 変数 存在する どうやって 物体 引用 記事 とは 詳しい説明

この記事では、PHPで変数参照を作成する方法と変数参照とは何なのかをまとめています。 PHP の変数参照の使い方を 1 つずつ紹介していきます。

引用符をどうするか
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 以降) で使用できます。

コードは次のとおりですコードをコピー $bar =& new fooclass();
$foo =& find_var($bar);
?>

PHP 5 では、new は自動的に参照を返すため、ここでの =& の使用は廃止され、E_STRICT レベルのメッセージが生成されます。

注:

& 演算子を使用しないと、オブジェクトのコピーが生成されます。クラスで $this を使用すると、そのクラスの現在のインスタンスに適用されます。 & なしで代入するとインスタンス (オブジェクトなど) がコピーされ、そのコピーに $this が適用されますが、必ずしも望ましい結果になるとは限りません。パフォーマンスとメモリ消費の問題のため、通常は 1 つのインスタンスのみで作業する必要があります。

@new などの @ 演算子を使用してコンストラクター内のエラー メッセージを抑制することは可能ですが、これは &new ステートメントを使用する場合には効果がありません。これは Zend エンジンの制限であり、解析エラーが発生します。

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

コードは次のとおりですコードをコピー


アドレスによる関数呼び出し
アドレスによる呼び出しについては詳しく説明しません。コードはすぐ下にあります

$a="ABC";
$b =&$a;
echo $a;//ここに出力: ABC
echo $b;//ここに出力: ABC
$b="EFG";
echo $a;//ここでの$aの値がEFGになるのでEFGが出力されます
echo $b;//ここにEFGを出力します
?>

コードは次のとおりです コードをコピー

機能テスト(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//出力 1
test($b); //ここで関数に渡される $b は、実際には $b の変数の内容が配置されているメモリ アドレスです。関数内の $a の値を変更することで、$b の値を変更できます。変わりました
echo "
";
echo $b;//出力 101

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

関数参照が返されます
まずはコードを見てみましょう

コードは次のとおりです コードをコピー

関数&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 であることを出力します

以下の説明:
このように、$a=test(); は実際には関数からの参照を取得しません。理由としては、これは PHP
の規定です。 PHP では、$a=&test(); を通じて取得されるものは関数の参照戻りであると規定されています
参照リターンとは何かというと (PHP マニュアルには、参照をバインドする必要がある変数を見つけるために関数を使用したい場合に参照リターンが使用されます。) このデタラメなことで、私は長い間理解できませんでした

上記の例を使用して説明します
$a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a を変更しても関数内の $b
には影響しません。 $a=&test() を通じて関数を呼び出すと、その関数は $b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスが同じ場所を指すようになります
つまり、これと同等の効果が生じる($a=&b;)ので、$aの値を変更すると$bの値も変更されるので、
を実行した後、 $a=&test();
$a=5;
これから$bの価値は5になります

ここで静的変数を使用するのは、関数の参照戻りを誰もが理解できるようにするためです。実際、関数の参照戻りは主にオブジェクトで使用されます

オブジェクトの参照

コードは次のとおりです コードをコピー

クラスA{
var $abc="ABC";
}
$b=新しいa;
$c=$b;
echo $b->abc;//ここにABCを出力します
echo $c->abc;//ここにABCを出力します
$b->abc="DEF";
echo $c->abc;//ここにDEFを出力します
?>

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

引用符の役割

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

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

コードは次のとおりですコードをコピー
$a = 1;
$b =& $a;
設定を解除 ($a);
?>

$b の設定は解除されず、$a のみが解除されます。

世界的な引用
global $var を使用して変数を宣言すると、実際にはグローバル変数への参照が作成されます。それはこれを行うのと同じです:

コードは次のとおりですコードをコピー $var =& $GLOBALS["var"];
?>
これは、たとえば、unset $var ではグローバル変数の設定が解除されないことを意味します。

$これ

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

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

平たく言うと

1: 次のコードがある場合

$a="ABC";

$b=$a;

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

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

$a="EFG";

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

関数内でグローバルに宣言された変数に参照が割り当てられている場合、その参照は関数内でのみ表示されます。これは、$GLOBALS 配列を使用することで回避できます。

例2 関数内でグローバル変数を参照する

コードは次のとおりですコードをコピー

global $var; は $var =& $GLOBALS['var']; の略称と考えてください。したがって、別の参照を $var に代入しても、ローカル変数への参照が変更されるだけです。


面接の質問を見てみましょう


PHP 面接の質問は次のとおりです:

$var1 = "変数の例";
$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 は 'サンプル変数' に設定されます
?>

質問:
コードは次のとおりです コードをコピー
$a = 1; $x =&$a; $b=$a++
?>

$b と $x の値は何ですか?


PHPの面接の質問に対する答えは次のとおりです:

$b = 1; $x = 2; インタビュー参照とオブジェクト参照についてどれだけ計算し、どれだけ知っているかを確認します。




http://www.bkjia.com/PHPjc/631279.html

www.bkjia.com

http://www.bkjia.com/PHPjc/631279.html技術記事この記事では、PHPで変数参照を作成する方法と変数参照とは何なのかについてまとめています。 PHP の変数参照の使い方を 1 つずつ紹介していきます。 PHP の引用符をどうするか...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

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とPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

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

See all articles