ホームページ  >  記事  >  バックエンド開発  >  PHPリファレンス定義とリファレンス渡しパラメータインスタンスの使い方を詳しく解説

PHPリファレンス定義とリファレンス渡しパラメータインスタンスの使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-17 16:52:572874ブラウズ

参照渡し

変数を参照によって関数に渡し、関数がそのパラメーターの値を変更できるようにすることができます。構文は次のとおりです。

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

関数呼び出しには参照記号はなく、関数定義のみにあることに注意してください。パラメーターを参照によって正しく渡すには、関数定義だけで十分です。最近のバージョンの PHP では、foo(&$a); で & を使用すると、「呼び出し時参照渡し」が非推奨であるという警告が表示されます。

以下のものは参照によって渡すことができます:

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()); // 自 PHP 5.0.5 起导致致命错误
foo($a = 5) // 表达式,不是变量
foo(5) // 导致致命错误
?>

これらの条件は、PHP 4.0.4 以降のバージョンで利用できます。

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

<?php
class foo {
    public $value = 42;
    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;                // prints the new value of $obj->value, i.e. 2.
?>

この例では、getValue 関数によって返されるオブジェクトのプロパティには、参照構文が使用されていないかのように、コピーされずに値が割り当てられます。

注: パラメーターの受け渡しとは異なり、ここでは両方の場所でアンパサンドを使用する必要があります。これは、通常のコピーではなく参照が返されることを示し、また $myValue が通常の割り当てではなく参照としてバインドされていることを示します。

注: return ($this->value); のように関数から参照を返そうとした場合、参照される変数ではなく式の結果を返そうとしているため、これは機能しません。参照変数を返すことができるのは関数からのみであり、他に方法はありません。コードが動的式または new 演算子の結果を返そうとすると、PHP 4.4.0 および PHP 5.1.0 以降では E_NOTICE エラーが発行されます。

<?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
?>

$a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a に加えられた変更は関数内の $b には影響しません。 、その機能は、$b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所にポイントすることです。これにより、この効果 ($a=&b;) と同等の効果が得られます。 $a の値は $b の値も変更するため、 $a=&test(); を実行すると、$b の値は 5 になります。

PHP の参照使用によるパラメーターの受け渡し

<?php
function add_some_extra(&$string) // 引入变量,使用同一个存储地址
{
  $string .= &#39;and something extra.&#39;;
}
$str = &#39;This is a string, &#39;;
add_some_extra($str);
echo $str;  // outputs &#39;This is a string, and something extra.&#39;
?>

出力:

This is a string, and something extra.

アンパサンドなし

<?php
function add_some_extra($string)
{
  $string .= &#39;and something extra.&#39;;
}
$str = &#39;This is a string, &#39;;
add_some_extra($str);
echo $str;  // outputs &#39;This is a string, &#39;
?>

出力:

This is a string,

以上がPHPリファレンス定義とリファレンス渡しパラメータインスタンスの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。