PHP実装関数リファレンスで返されるインスタンスの詳細説明

墨辰丷
リリース: 2023-03-29 06:34:01
オリジナル
1352 人が閲覧しました

実際、PHP の関数参照は PHP の変数参照と同じです。どちらもアンパサンドを使用します。そこで、必要な場合に参照できる関数参照の例をいくつか見てみましょう。バー。

リファレンスリターン

マニュアルには次のように書かれています: リファレンスリターンは、関数を使用して参照をバインドする必要がある変数を見つけたい場合に使用されます。パフォーマンスを向上させるために戻り参照を使用しないでください。エンジンはそれ自体を最適化するのに十分な機能を備えています。正当な技術的理由がある場合にのみ参照を返してください。参照を返すには

関数の戻り参照を変数にバインドしたい場合、PHP では次のようにすることができます:

function &returns_reference()
{
  static $someref = 0;
  $someref++;
  return $someref;
}
 
$newref = &returns_reference();//引用返回,相当于 $newref = &$someref;
echo $newref; //1
//phpfensi.com
$notref = returns_reference(); //值传递的是副本
$newref = 100;
echo $notref; //2
 
$newref = 100;
echo returns_reference(); //101
ログイン後にコピー

Visible,関数が参照を返すようにするには、次のようにする必要があります。関数を宣言して割り当てます。すべて & 演算子を使用します。

クラス内のメソッドにも同じことが当てはまります:

class foo {
  public $value = 0;
 
  public function &getValue() {
    return $this->value;
  }
}
 
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;
ログイン後にコピー

いくつかの簡単な例

以下の簡単な例を見て、試してみてください。参照の戻り値を理解してください。

<?php
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
?>
//程序运行结果:
1
2
3
6
ログイン後にコピー

関数の宣言方法は function &test() ですが、このように関数を呼び出して得られるものは $a = test() は実際には関数ではありません。 参照が返されます。これは通常の関数呼び出しと変わりません。 PHP では、$a = &test() によって取得されるものは関数の参照戻り値であると規定されています。 function &test() 这样,但我们通过这种方式 $a = test() 的函数调用得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。PHP 规定通过 $a = &test() 这种方式得到的才是函数的引用返回。

用上面的例子来解释就是,$a = test() 这种方式调用函数,只是将函数的值赋给 $a 而已,而$a做任何改变都不会影响到函数中的$b。

而通过 $a = &test() 方式调用函数呢,它的作用是将 return $b 中的 $b 变量的内存地址与 $a 变量的内存地址指向了同一个地方。即产生了相当于这样的效果 ($a=&$b

上の例を使って説明すると、 $a = test() この方法で関数を呼び出すと、関数の値が $a に代入されるだけで、$a を変更しても影響を受けません。関数内の $b に。

そして $a = &test() を通じて関数を呼び出すと、その関数は return $b 内の $b 変数のメモリ アドレスを $a と比較することになります。変数 メモリアドレスは同じ場所を指します。つまり、効果はこれ($a=&$b)と同等なので、$aの値を変更すると$bの値も変更されます。

つまり、

$a = &test();

$a = 5;
ログイン後にコピー

を実行すると、$bの値は5になります。

理解を深めるための別のプログラム例:

<?php
/*
** 值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址
*/
// 函数的引用,定义时也要加上 &
function &func($a,$b){ 
 // 这里为了更直观看到效果,定义一个静态变量
 static $result = 0;  
 $result+=$a+$b;
 echo $result.&#39;<br />&#39;;
 return $result;
}
 
$a = $b = 10;
// PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result)
// 要记住:PHP里的函数引用定义及调用都要在函数名前加上 &
$c = func($a,$b); 
// 第一次执行func(),其静态变量$result的值变为 20(10+10)
// 改变$c的值,不会对下面一行语句产生影响
$c = 666; 
// 第二次执行func(),其静态变量$result的值变为 40(20+10+10)
$c = func($a,$b);
echo &#39;<hr />&#39;;
// 这样才是PHP中引用函数的调用方式
$d = &func($a,$b); 
// 第三次执行func(),其静态变量$result的值变为 40(40+10+10)
$d = 888;
// 第四次执行func(),其静态变量$result的值变为 908(888+10+10)
$d = func($a,$b);
?>
ログイン後にコピー

概要: 上記がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項: php
WeChat開発用のカスタムメニューの実装

php
Excelファイルをネイティブにエクスポートする2つの方法の詳細な説明

php
DOMの解決方法文字化けしたコード

🎜🎜

以上がPHP実装関数リファレンスで返されるインスタンスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート