PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP】関数やメソッドで参照を返す方法 ― リファレンス返しの基本と実例

はじめに

PHPでは、関数が参照(リファレンス)を返すように定義することができます。これは、呼び出し元のどの変数に参照を結び付けるべきかを制御したい場合に役立ちます。参照を返す関数を定義するには、関数名の先頭に & 記号を付けます。さらに、呼び出し側でも参照として受け取るために、代入時に & を指定する必要があります。

参照を返す関数のサンプル

次の例では、myfunction() が参照を返すように定義されています。関数内には static 変数が用意されており、その参照が返されてグローバル変数に代入されます。関数の外でこの変数に新しい値を代入すると、関数内の static 変数の値も一緒に変わる点に注目してください。

<?php
function &myfunction(){
    static $x = 10;
    echo "x Inside function: ", $x, "\n";
    return $x;
}
$a =& myfunction(); // 関数内の $x への参照を受け取る
echo "returned by reference: ", $a, "\n";
$a = $a + 10; // 関数内の変数も加算される
$a =& myfunction();
?>

実行結果

x Inside function: 10
returned by reference: 10
x Inside function: 20

動作のポイント

  • $a =& myfunction(); の時点で、関数内の static 変数 $x への参照が $a に格納されます。
  • $a に 10 を加算すると、実体である関数内の $x も 20 に更新されます。
  • もう一度 myfunction() を呼び出すと、static 変数が保持している値 20 が出力されます。

参照を返すメソッド

クラスにも、参照を返せるメソッドを持たせることができます。これにより、通常はクラスの外部からアクセスできない private なインスタンス変数の値を、外側から変更できるようになります。

<?php
class myclass{
    private $val;
    function __construct($x){
        $this->val = $x;
    }
    function &getbyref(){
        return $this->val;
    }
    function getbyval(){
        return $this->val;
    }
}
$a = new myclass(10);
$b =& $a->getbyref();
$b = 100;
echo "Value of private property: ", $a->getbyval();
?>

実行結果

Value of private property: 100

getbyref() メソッドは private プロパティ $val の参照を返すため、$b 経由で値を 100 に書き換えると、getbyval() の戻り値も 100 に変わります。このように参照返しを利用すると、private プロパティであっても外部から値を操作できてしまうため、カプセル化の観点から使用には注意が必要です。

  1. PHPのmin()関数とは?使い方と具体例を徹底解説

    min()関数の定義と使い方min()関数は、配列に含まれる要素の中で最も小さい値、あるいは2つ以上のカンマ区切りで指定された引数の中で最小の値を返す組み込み関数です。数値だけでなく文字列なども比較でき、PHPプログラミングにおいて非常に頻繁に利用される基本的な関数の一つです。構文配列を引数として渡す場合:min(array $values): mixed複数の値を直接渡す場合:min(mixed $value1 [, mixed $... ]): mixedパラメータ番号パラメータと説明1values引数が1つだけの場合、その引数は配列である必要があります。配列の要素は同一型でも異なる型でも

  2. PHPのmax()関数とは?配列・複数の値から最大値を取得する方法を解説

    max()関数の定義と用途PHPのmax()関数は、配列の中から最も大きい要素、または2つ以上のカンマ区切りの引数の中から最大の値を返す組み込み関数です。数値だけでなく文字列の比較にも対応しており、さまざまな場面で活用できます。構文配列を引数として渡す場合:max ( array $values ) : mixedまたは複数の値を直接渡す場合:max ( mixed $value1 [, mixed $... ] ) : mixedパラメータNo.パラメータと説明1values引数が1つだけ指定された場合は、同じ型または異なる型の値を含む配列を渡す必要があります。2value1, value2