1
<?php
class ExtendedArrayObject extends ArrayObject {
    private $_array;
    public function __construct()
    {
        if (is_array(func_get_arg(0)))
            $this->_array = func_get_arg(0);
        else
            $this->_array = func_get_args();
        parent::__construct($this->_array);
    }

    public function reverse($applyToSelf=false)
    {
        if (!$applyToSelf)
        {
            return array_reverse($this->_array);
        }
        else
        {
            $_array = array_reverse($this->_array);
            $this->_array = $_array;
            parent::__construct($this->_array);
            return $this->_array;
        }
    }
}
$newArray = new ExtendedArrayObject(array(1,2,3,4,5,6));
print_r($newArray->reverse()); //reverse the array
...
?>

上記のコードは本から取られています。

質問:

コードをに変更しましたprint_r($newArray->reverse(true)); が、出力は同じです。出力は同じなので、なぜ if...else... を使用する必要があるのでしょうか? その場合、なぜこの else 部分が必要なのですか?

ありがとう。

4

4 に答える 4

0

その可変状態と関係があります。

else 部分は、元の配列を元の順序のままにして、逆配列の戻り値を許可します

<?php
$newArray1 = new ExtendedArrayObject(array(1,2,3,4,5,6));
$revArray1 = $newArray->reverse();

print_r($newArray1); // 1, 2, 3, 4, 5, 6
print_r($revArray1); // 6, 5, 4, 3, 2, 1

$newArray2 = new ExtendedArrayObject(array(1,2,3,4,5,6));
$revArray2 = $newArray->reverse(true);

print_r($newArray2); // 6, 5, 4, 3, 2, 1
print_r($revArray2); // 6, 5, 4, 3, 2, 1
于 2013-04-22T09:32:31.653 に答える
0

出力は同じように見えますが、根本的に異なります。

現在の print_r の代わりにこれを試してください:

print_r($newArray);
print_r($newArray->reverse());
print_r($newArray);
print_r($newArray->reverse(true));
print_r($newArray);

見る?それは非常に異なっています!

于 2013-04-22T09:34:33.097 に答える
0

違いは、false の場合、反転した配列がプライベート変数に割り当てられないことです$_array。実際の場合、それが割り当てられます。

$array = new ExtendedArrayObject(array(1,2,3,4,5,6));

//false case
$reversed_array1 = $array->reverse();
var_dump($reversed_array1);//6,5,4,3,2,1
var_dump($array);//1,2,3,4,5,6

//true case
$reversed_array2 = $array->reverse(true);
var_dump($reversed_array2);//6,5,4,3,2,1
var_dump($array);//6,5,4,3,2,1
于 2013-04-22T09:37:37.627 に答える