File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / classes / array_access_011.phpt
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:48:06 2012 UTC (12 years, 4 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, v5_3_10, HEAD
php

    1: --TEST--
    2: ZE2 ArrayAccess and ArrayAccessReferenceProxy with references to main array
    3: --FILE--
    4: <?php 
    5: 
    6: // NOTE: This will become part of SPL
    7: 
    8: class ArrayAccessReferenceProxy implements ArrayAccess
    9: {
   10: 	private $object;
   11: 	private $oarray;
   12: 	private $element;
   13: 	
   14: 	function __construct(ArrayAccess $object, array &$array, $element)
   15: 	{
   16: 		echo __METHOD__ . "($element)\n";
   17: 		$this->object = $object;
   18: 		$this->oarray = &$array;
   19: 		$this->element = $element;
   20: 	}
   21: 
   22: 	function offsetExists($index) {
   23: 		echo __METHOD__ . "($this->element, $index)\n";
   24: 		return array_key_exists($index, $this->oarray[$this->element]);
   25: 	}
   26: 
   27: 	function offsetGet($index) {
   28: 		echo __METHOD__ . "($this->element, $index)\n";
   29: 		return isset($this->oarray[$this->element][$index]) ? $this->oarray[$this->element][$index] : NULL;
   30: 	}
   31: 
   32: 	function offsetSet($index, $value) {
   33: 		echo __METHOD__ . "($this->element, $index, $value)\n";
   34: 		$this->oarray[$this->element][$index] = $value;
   35: 	}
   36: 
   37: 	function offsetUnset($index) {
   38: 		echo __METHOD__ . "($this->element, $index)\n";
   39: 		unset($this->oarray[$this->element][$index]);
   40: 	}
   41: }
   42: 
   43: class Peoples implements ArrayAccess
   44: {
   45: 	public $person;
   46: 	
   47: 	function __construct()
   48: 	{
   49: 		$this->person = array(array('name'=>'Foo'));
   50: 	}
   51: 
   52: 	function offsetExists($index)
   53: 	{
   54: 		return array_key_exists($index, $this->person);
   55: 	}
   56: 
   57: 	function offsetGet($index)
   58: 	{
   59: 		if (is_array($this->person[$index]))
   60: 		{
   61: 			return new ArrayAccessReferenceProxy($this, $this->person, $index);
   62: 		}
   63: 		else
   64: 		{
   65: 			return $this->person[$index];
   66: 		}
   67: 	}
   68: 
   69: 	function offsetSet($index, $value)
   70: 	{
   71: 		$this->person[$index] = $value;
   72: 	}
   73: 
   74: 	function offsetUnset($index)
   75: 	{
   76: 		unset($this->person[$index]);
   77: 	}
   78: }
   79: 
   80: $people = new Peoples;
   81: 
   82: var_dump($people->person[0]['name']);
   83: $people->person[0]['name'] = $people->person[0]['name'] . 'Bar';
   84: var_dump($people->person[0]['name']);
   85: $people->person[0]['name'] .= 'Baz';
   86: var_dump($people->person[0]['name']);
   87: 
   88: echo "===ArrayOverloading===\n";
   89: 
   90: $people = new Peoples;
   91: 
   92: var_dump($people[0]);
   93: var_dump($people[0]['name']);
   94: $people[0]['name'] = 'FooBar';
   95: var_dump($people[0]['name']);
   96: $people[0]['name'] = $people->person[0]['name'] . 'Bar';
   97: var_dump($people[0]['name']);
   98: $people[0]['name'] .= 'Baz';
   99: var_dump($people[0]['name']);
  100: unset($people[0]['name']);
  101: var_dump($people[0]);
  102: var_dump($people[0]['name']);
  103: $people[0]['name'] = 'BlaBla';
  104: var_dump($people[0]['name']);
  105: 
  106: ?>
  107: ===DONE===
  108: <?php exit(0); ?>
  109: --EXPECTF--
  110: string(3) "Foo"
  111: string(6) "FooBar"
  112: string(9) "FooBarBaz"
  113: ===ArrayOverloading===
  114: ArrayAccessReferenceProxy::__construct(0)
  115: object(ArrayAccessReferenceProxy)#%d (3) {
  116:   ["object":"ArrayAccessReferenceProxy":private]=>
  117:   object(Peoples)#%d (1) {
  118:     ["person"]=>
  119:     &array(1) {
  120:       [0]=>
  121:       array(1) {
  122:         ["name"]=>
  123:         string(3) "Foo"
  124:       }
  125:     }
  126:   }
  127:   ["oarray":"ArrayAccessReferenceProxy":private]=>
  128:   &array(1) {
  129:     [0]=>
  130:     array(1) {
  131:       ["name"]=>
  132:       string(3) "Foo"
  133:     }
  134:   }
  135:   ["element":"ArrayAccessReferenceProxy":private]=>
  136:   int(0)
  137: }
  138: ArrayAccessReferenceProxy::__construct(0)
  139: ArrayAccessReferenceProxy::offsetGet(0, name)
  140: string(3) "Foo"
  141: ArrayAccessReferenceProxy::__construct(0)
  142: ArrayAccessReferenceProxy::offsetSet(0, name, FooBar)
  143: ArrayAccessReferenceProxy::__construct(0)
  144: ArrayAccessReferenceProxy::offsetGet(0, name)
  145: string(6) "FooBar"
  146: ArrayAccessReferenceProxy::__construct(0)
  147: ArrayAccessReferenceProxy::offsetSet(0, name, FooBarBar)
  148: ArrayAccessReferenceProxy::__construct(0)
  149: ArrayAccessReferenceProxy::offsetGet(0, name)
  150: string(9) "FooBarBar"
  151: ArrayAccessReferenceProxy::__construct(0)
  152: ArrayAccessReferenceProxy::offsetGet(0, name)
  153: ArrayAccessReferenceProxy::offsetSet(0, name, FooBarBarBaz)
  154: ArrayAccessReferenceProxy::__construct(0)
  155: ArrayAccessReferenceProxy::offsetGet(0, name)
  156: string(12) "FooBarBarBaz"
  157: ArrayAccessReferenceProxy::__construct(0)
  158: ArrayAccessReferenceProxy::offsetUnset(0, name)
  159: ArrayAccessReferenceProxy::__construct(0)
  160: object(ArrayAccessReferenceProxy)#%d (3) {
  161:   ["object":"ArrayAccessReferenceProxy":private]=>
  162:   object(Peoples)#%d (1) {
  163:     ["person"]=>
  164:     &array(1) {
  165:       [0]=>
  166:       array(0) {
  167:       }
  168:     }
  169:   }
  170:   ["oarray":"ArrayAccessReferenceProxy":private]=>
  171:   &array(1) {
  172:     [0]=>
  173:     array(0) {
  174:     }
  175:   }
  176:   ["element":"ArrayAccessReferenceProxy":private]=>
  177:   int(0)
  178: }
  179: ArrayAccessReferenceProxy::__construct(0)
  180: ArrayAccessReferenceProxy::offsetGet(0, name)
  181: NULL
  182: ArrayAccessReferenceProxy::__construct(0)
  183: ArrayAccessReferenceProxy::offsetSet(0, name, BlaBla)
  184: ArrayAccessReferenceProxy::__construct(0)
  185: ArrayAccessReferenceProxy::offsetGet(0, name)
  186: string(6) "BlaBla"
  187: ===DONE===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>