php-src/ext/spl/tests/array_017.phpt
2012-10-10 10:27:49 +08:00

818 lines
12 KiB
PHP

--TEST--
SPL: ArrayObject::exchangeArray($this)
--FILE--
<?php
class ArrayIteratorEx extends ArrayIterator
{
public $pub2 = 1;
protected $pro2 = 2;
private $pri2 = 3;
function __construct($ar, $flags = 0)
{
echo __METHOD__ . "()\n";
parent::__construct($ar, $flags);
$this->imp2 = 4;
}
function dump()
{
echo __METHOD__ . "()\n";
var_dump(array('Flags'=>$this->getFlags()
,'OVars'=>get_object_vars($this)
,'$this'=>$this));
}
function setFlags($flags)
{
echo __METHOD__ . "($flags)\n";
ArrayIterator::setFlags($flags);
}
}
class ArrayObjectEx extends ArrayObject
{
public $pub1 = 1;
protected $pro1 = 2;
private $pri1 = 3;
function __construct($ar = array(), $flags = 0)
{
echo __METHOD__ . "()\n";
parent::__construct($ar, $flags);
$this->imp1 = 4;
}
function exchange()
{
echo __METHOD__ . "()\n";
$this->exchangeArray($this);
}
function dump()
{
echo __METHOD__ . "()\n";
var_dump(array('Flags'=>$this->getFlags()
,'OVars'=>get_object_vars($this)
,'$this'=>$this));
}
function show()
{
echo __METHOD__ . "()\n";
foreach($this as $n => $v)
{
var_dump(array($n => $v));
}
}
function setFlags($flags)
{
echo __METHOD__ . "($flags)\n";
ArrayObject::setFlags($flags);
}
function getIterator()
{
echo __METHOD__ . "()\n";
$it = new ArrayIteratorEx($this, $this->getFlags());
$it->dyn2 = 5;
$it->dump();
return $it;
}
}
function check($obj, $flags)
{
echo "===CHECK===\n";
$obj->setFlags($flags);
$obj->dump();
$obj->show();
echo "===FOREACH===\n";
$it = $obj->getIterator();
foreach($it as $n => $v)
{
var_dump(array($n => $v));
}
echo "===PROPERTY===\n";
var_dump($obj->pub1);
var_dump(isset($obj->a));
$obj->setFlags($flags | 2);
var_dump($obj->pub1);
var_dump(isset($obj->a));
var_dump($it->pub2);
var_dump(isset($it->pub1));
$it->setFlags($flags | 2);
var_dump($it->pub2);
var_dump(isset($it->pub1));
}
$obj = new ArrayObjectEx(array(0=>1,'a'=>25, 'pub1'=>42), 0);
$obj->dyn1 = 5;
check($obj, 0);
check($obj, 1);
echo "#####EXCHANGE#####\n";
$obj->exchange();
check($obj, 0);
check($obj, 1);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
ArrayObjectEx::__construct()
===CHECK===
ArrayObjectEx::setFlags(0)
ArrayObjectEx::dump()
array(3) {
["Flags"]=>
int(0)
["OVars"]=>
array(2) {
["a"]=>
int(25)
["pub1"]=>
int(42)
}
["$this"]=>
object(ArrayObjectEx)#%d (6) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
["storage":"ArrayObject":private]=>
array(3) {
[0]=>
int(1)
["a"]=>
int(25)
["pub1"]=>
int(42)
}
}
}
ArrayObjectEx::show()
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(0)
["OVars"]=>
array(2) {
["a"]=>
int(25)
["pub1"]=>
int(42)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (6) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
["storage":"ArrayObject":private]=>
array(3) {
[0]=>
int(1)
["a"]=>
int(25)
["pub1"]=>
int(42)
}
}
}
}
array(1) {
[0]=>
int(1)
}
array(1) {
["a"]=>
int(25)
}
array(1) {
["pub1"]=>
int(42)
}
===FOREACH===
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(0)
["OVars"]=>
array(2) {
["a"]=>
int(25)
["pub1"]=>
int(42)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (6) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
["storage":"ArrayObject":private]=>
array(3) {
[0]=>
int(1)
["a"]=>
int(25)
["pub1"]=>
int(42)
}
}
}
}
array(1) {
[0]=>
int(1)
}
array(1) {
["a"]=>
int(25)
}
array(1) {
["pub1"]=>
int(42)
}
===PROPERTY===
int(1)
bool(false)
ArrayObjectEx::setFlags(2)
int(1)
bool(true)
int(1)
bool(false)
ArrayIteratorEx::setFlags(2)
int(1)
bool(true)
===CHECK===
ArrayObjectEx::setFlags(1)
ArrayObjectEx::dump()
array(3) {
["Flags"]=>
int(1)
["OVars"]=>
array(5) {
["pub1"]=>
int(1)
["pro1"]=>
int(2)
["pri1"]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
["$this"]=>
object(ArrayObjectEx)#%d (6) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
["storage":"ArrayObject":private]=>
array(3) {
[0]=>
int(1)
["a"]=>
int(25)
["pub1"]=>
int(42)
}
}
}
ArrayObjectEx::show()
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(1)
["OVars"]=>
array(5) {
["pub2"]=>
int(1)
["pro2"]=>
int(2)
["pri2"]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (6) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
["storage":"ArrayObject":private]=>
array(3) {
[0]=>
int(1)
["a"]=>
int(25)
["pub1"]=>
int(42)
}
}
}
}
array(1) {
[0]=>
int(1)
}
array(1) {
["a"]=>
int(25)
}
array(1) {
["pub1"]=>
int(42)
}
===FOREACH===
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(1)
["OVars"]=>
array(5) {
["pub2"]=>
int(1)
["pro2"]=>
int(2)
["pri2"]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (6) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
["storage":"ArrayObject":private]=>
array(3) {
[0]=>
int(1)
["a"]=>
int(25)
["pub1"]=>
int(42)
}
}
}
}
array(1) {
[0]=>
int(1)
}
array(1) {
["a"]=>
int(25)
}
array(1) {
["pub1"]=>
int(42)
}
===PROPERTY===
int(1)
bool(false)
ArrayObjectEx::setFlags(3)
int(1)
bool(true)
int(1)
bool(false)
ArrayIteratorEx::setFlags(3)
int(1)
bool(true)
#####EXCHANGE#####
ArrayObjectEx::exchange()
===CHECK===
ArrayObjectEx::setFlags(0)
ArrayObjectEx::dump()
array(3) {
["Flags"]=>
int(0)
["OVars"]=>
array(5) {
["pub1"]=>
int(1)
["pro1"]=>
int(2)
["pri1"]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
["$this"]=>
object(ArrayObjectEx)#%d (5) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
}
ArrayObjectEx::show()
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(0)
["OVars"]=>
array(4) {
["pub1"]=>
int(1)
["pro1"]=>
int(2)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (5) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
}
}
array(1) {
["pub1"]=>
int(1)
}
array(1) {
["imp1"]=>
int(4)
}
array(1) {
["dyn1"]=>
int(5)
}
===FOREACH===
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(0)
["OVars"]=>
array(4) {
["pub1"]=>
int(1)
["pro1"]=>
int(2)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (5) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
}
}
array(1) {
["pub1"]=>
int(1)
}
array(1) {
["imp1"]=>
int(4)
}
array(1) {
["dyn1"]=>
int(5)
}
===PROPERTY===
int(1)
bool(false)
ArrayObjectEx::setFlags(2)
int(1)
bool(false)
int(1)
bool(false)
ArrayIteratorEx::setFlags(2)
int(1)
bool(true)
===CHECK===
ArrayObjectEx::setFlags(1)
ArrayObjectEx::dump()
array(3) {
["Flags"]=>
int(1)
["OVars"]=>
array(5) {
["pub1"]=>
int(1)
["pro1"]=>
int(2)
["pri1"]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
["$this"]=>
object(ArrayObjectEx)#%d (5) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
}
ArrayObjectEx::show()
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(1)
["OVars"]=>
array(5) {
["pub2"]=>
int(1)
["pro2"]=>
int(2)
["pri2"]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (5) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
}
}
array(1) {
["pub1"]=>
int(1)
}
array(1) {
["imp1"]=>
int(4)
}
array(1) {
["dyn1"]=>
int(5)
}
===FOREACH===
ArrayObjectEx::getIterator()
ArrayIteratorEx::__construct()
ArrayIteratorEx::dump()
array(3) {
["Flags"]=>
int(1)
["OVars"]=>
array(5) {
["pub2"]=>
int(1)
["pro2"]=>
int(2)
["pri2"]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
}
["$this"]=>
object(ArrayIteratorEx)#%d (6) {
["pub2"]=>
int(1)
["pro2":protected]=>
int(2)
["pri2":"ArrayIteratorEx":private]=>
int(3)
["imp2"]=>
int(4)
["dyn2"]=>
int(5)
["storage":"ArrayIterator":private]=>
object(ArrayObjectEx)#%d (5) {
["pub1"]=>
int(1)
["pro1":protected]=>
int(2)
["pri1":"ArrayObjectEx":private]=>
int(3)
["imp1"]=>
int(4)
["dyn1"]=>
int(5)
}
}
}
array(1) {
["pub1"]=>
int(1)
}
array(1) {
["imp1"]=>
int(4)
}
array(1) {
["dyn1"]=>
int(5)
}
===PROPERTY===
int(1)
bool(false)
ArrayObjectEx::setFlags(3)
int(1)
bool(false)
int(1)
bool(false)
ArrayIteratorEx::setFlags(3)
int(1)
bool(true)
===DONE===