PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

リファレンス渡し | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

リファレンス渡し

リファレンスにより関数に変数を渡すことが可能です。この場合、関数内で その引数を修正可能になります。構文は次のようになります。

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
// $a はここでは 6 です
?>

注意: 関数コールの際には、リファレンス記号がないことに注意してください。 関数定義にのみリファレンス記号があります。リファレンスで正しく引数を 渡すには、関数定義のみで十分です。 PHP 5.3.0 以降では、foo(&$a); のような形式で & を利用すると "Call-time pass-by-reference" を非推奨とする警告が発生します。 また、PHP 5.4.0 以降では call-time pass-by-reference 機能自体が削除されたので、 これを使おうとすると fatal エラーが発生します。

次のものはリファレンスで渡すことが可能です。

  • 変数、すなわち、foo($a)
  • new 命令、すなわち、foo(new foobar())
  • 関数から返されるリファレンスは、次のようになります。

    <?php
    function foo(&$var)
    {
        
    $var++;
    }
    function &
    bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>
    リファレンスによる 返り値 に関する説明も参照ください。

他の式は、結果が未定義となるため、リファレンスで渡すべきではありません。 例えば、リファレンスで渡す次の例は、無効です。

<?php
function foo(&$var)
{
    
$var++;
}
function 
bar() // & がないことに注意
{
    
$a 5;
    return 
$a;
}
foo(bar()); // PHP 5.0.5 以降、致命的なエラーが発生する
            // PHP 5.1.1 以降では strict notice、そして PHP 7.0.0 以降では notice となる

foo($a 5); // 式、変数ではない
foo(5); // 致命的なエラーが発生する
?>


忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「リファレンス渡し」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | リファレンス渡し」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: