File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / classes / array_access_010.phpt
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:34:34 2012 UTC (12 years, 2 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, HEAD
php 5.4.3+patches

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

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