Skip to content

Commit

Permalink
Add some information about array overloading
Browse files Browse the repository at this point in the history
  • Loading branch information
helly25 committed Aug 30, 2004
1 parent a501660 commit 8867010
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions Zend/ZEND_CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 8867010

Please sign in to comment.