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

不同之处在于,对于 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 回答
0

使用$applyToSelf,您的数组将永久更改,因此如果您稍后在程序中引用它,您将使用反转数组。

如果没有$applyToSelf,则不是,因此您只是返回一个反向数组以供一次性使用。

于 2013-04-22T09:38:07.163 回答
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 回答