PHP カスタム関数リファレンスは何を返しますか?リファレンスリターンインスタンスの詳細説明

伊谢尔伦
リリース: 2023-03-11 14:52:01
オリジナル
1149 人が閲覧しました

ReferenceReturn

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

関数の戻り参照を変数にバインドしたい場合、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
ログイン後にコピー

関数に参照を返してもらいたい場合は、& を持ってくる必要があることがわかります。 関数を宣言して代入するとき.

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

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 カスタム関数リファレンスは何を返しますか?リファレンスリターンインスタンスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!