1

関数定義と変数割り当ての両方にアンパサンドを入れて、PHP で参照を返すセクションを読みました。しかし、オブジェクト指向プログラミングに関係のないphpコードの「参照を返す」例をまだ見つけていません。誰でもこれと例の使用を提供できますか?

4

2 に答える 2

2

非常に単純化された例から始めましょう。

class Test {

    //Public intentionally
    //Because we are going to access it directly later
    //in order to see if it's changed
    public $property = 'test';

    /**
     * Look carefully at getPropReference() title
     * we have an ampersand there, that is we're indicating
     * that we're returning a reference to the class property
     * 
     * @return string A reference to $property
     */
    public function &getPropReference()
    {
         return $this->property;
    }
}


$test = new Test();

//IMPORTANT!! Assign to $_foo a reference, not a copy!
//Otherwise, it does not make sense at all
$_foo =& $test->getPropReference();

//Now when you change a $_foo the property of an $test object would be changed as well
$_foo = "another string";

// As you can see the public property of the class
// has been changed as well
var_dump($test->property); // Outputs: string(14) "another string" 

$_foo = "yet another string";
var_dump($test->property);   //Outputs "yet another string"
于 2012-12-31T23:30:07.037 に答える
-1

更新:この回答は、参照による戻りではなく、参照による受け渡しに関するものです。その情報価値のために保持されます。

これを読む:

http://php.net/manual/en/language.references.pass.php

次に、この例を見てください。

<?php
function AddTimestamp(&$mytimes)
{
    $mytimes[] = time();
}


$times = array();
AddTimestamp($times);
AddTimestamp($times);
AddTimestamp($times);

// Result is an array with 3 timestamps.

これは、オブジェクト指向の手法を使用してより適切に実装できますか?おそらく、しかし時々、既存の値ベースのデータ構造または変数を変更する必要性/理由があります。

このことを考慮:

function ValidateString(&$input, &$ErrorList)
{
   $input = trim($input);
   if(strlen($input) < 1 || strlen($input) > 10) 
   {
      $ErrorList[] = 'Input must be between 1 and 10 characters.';
      return False;
   }
} 

$Err = array();
$Name = '  Jason    ';

ValidateString($Name, $Err);

// At this point, $Name is trimmed. If there was an error, $Err has the message.

したがって、ニーズによっては、PHPで参照を渡す場合があります。オブジェクトは常に参照によって渡されるため、データをオブジェクトにカプセル化すると、自動的に参照になります。

于 2012-12-31T22:17:14.837 に答える