<?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 ...?在哪种情况下,为什么我们需要这个其他部分?
感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
输出LOOKS相同,但它完全不同。
尝试此而不是当前的print_r:
print_r($newArray);
print_r($newArray->reverse());
print_r($newArray);
print_r($newArray->reverse(true));
print_r($newArray);
请参阅?这是非常不同的!
答案 2 :(得分:0)
不同之处在于,对于错误情况,反转数组未分配给私有变量$_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
答案 3 :(得分:0)
使用$applyToSelf
,您的数组会被永久更改,因此如果您稍后在程序中引用它,您将使用反向数组。
没有$applyToSelf
,它不是,所以你只是为了一次性使用而返回一个反向数组。