]> granicus.if.org Git - php/commitdiff
MFH: Add some information about array overloading
authorMarcus Boerger <helly@php.net>
Mon, 30 Aug 2004 18:49:49 +0000 (18:49 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 30 Aug 2004 18:49:49 +0000 (18:49 +0000)
Zend/ZEND_CHANGES

index 81f14d279319675484b6d28fca0865f35fdc9335..5208ce1623929d5226f1ac9b3477a9b6bf6ef634 100644 (file)
@@ -890,6 +890,47 @@ Changes in the Zend Engine 2.0
       the use of all abstract methods declared in the interfaces Iterator
       and IteratorAggregate respectively.
 
+    * Array overloading
+    
+      Objects can be used with Array notation when they implement the 
+      interface ArrayAccess. You cannot use such objects in standard
+      array functions, however you have full control over the array
+      notation. This allows lazy initialization or read only array.
+      
+      Note that setting [] results in a call to offsetSet() with
+      index being NULL. That means that as with standard arrays you 
+      cannot store NULL keys.
+      
+      Example:
+      
+        <?php
+               class ArrayClass implements ArrayAccess {
+                               public $a = array();
+                       
+                               function offsetExists($index) {
+                                       return array_key_exists($index, $this->a);
+                               }
+                               function offsetGet($index) {
+                                       return $this->a[$index];
+                               }
+                               function offsetSet($index, $newval) {
+                                       return $this->a[$index] = $newval;
+                               }
+                               function offsetUnset($index) {
+                                       unset($this->a[$index]);
+                               }
+                       }
+                       
+                       $obj = new ArrayClass;
+                       
+                       $obj[0] = 'bla';     // calls offsetSet(0,'bla')
+                       $obj[] = 42;         // calls offsetSet(NULL, 42)
+                       $x = $obj[0];        // calls offsetGet(0)
+                       $b = isset($obj[0]); // calls offsetExists(0)
+                       unset($obj[0]);      // calls offsetUnset(0)
+               ?>
+
     * __METHOD__
 
       The pseudo constant __METHOD__ shows the current class and method