2013-04-22 38 views
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 
... 
?> 

上面的代码取自一本书。tring了解一些与php中的array_reverse有关的代码

问:

我改变了代码print_r($newArray->reverse(true)); 但输出是一样的。所以既然输出是相同的,为什么我们需要使用if ... else ...?在这种情况下,为什么我们需要这部分?

谢谢。

+1

你在else {}语句里面有一些错误..目前它没有任何意义可以在没有任何东西的情况下调用parent :: __构造 – Svetoslav 2013-04-22 09:34:22

回答

0

它与可变状态。

的其他部分允许reverese阵列的返回值,同时保留原始数组中的原始顺序

<?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 
0

输出看起来是相同的,但它是完全不同的。

试试这个,而不是当前的print_r的:

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

看到了吗?这是非常不同的!

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 
0

随着$applyToSelf,你的阵列被永久改变,所以如果你在以后的程序中引用它,你将使用反向阵列。

没有$applyToSelf,它不是,所以你只是返回一个反向数组为一次性使用。