note 77794 modified in ref.spl by vrana
| From: | vrana@php.net | Date: | Tue, 27 May 2008 14:08:29 +0000 |
| Subject: | note 77794 modified in ref.spl by vrana | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-139853@lists.php.net to get a copy of this message | ||
This code is an example. By using classes like this, you gives a chance to create classes which
extends another class but have most of the ability what a class extends ArrayObject (like multiple
inheritance):
<?php
class foo
{
public $foo = 'foo';
} // class
class foobar extends foo implements ArrayAccess,IteratorAggregate,Countable
{
public function offsetExists($offset)
{
$array = array(1, 2, 3, 4);
return array_key_exists($offset, $array);
}
public function offsetGet($offset)
{
$array = array(1, 2, 3, 4);
return $array[$offset];
}
public function offsetSet($offset, $value)
{
// Makes "array" to readonly
}
public function offsetUnset($offset)
{
// Makes "array" to readonly
}
function count()
{
$array = array(1, 2, 3, 4);
return count($array);
} // function
function getArray()
{
return array(1, 2, 3, 4);
} // function
function getIterator()
{
return new ArrayIterator(array(1, 2, 3, 4));
} // function
function __toString()
{
return 'String test';
} // function
} // class
$foobar = new foobar();
print $foobar[0].'<br/>';
print $foobar->foo.'<br/>';
print count($foobar).'<br/>';
foreach ($foobar as $k=>$v)
{
print $k.'=>'.$v.'<br/>';
} // foreach
var_dump($foobar->getArray());
print $foobar;
/* Generated output:
1
foo
4
0=>1
1=>2
2=>3
3=>4
array
0 => int 1
1 => int 2
2 => int 3
3 => int 4
String test
*/
?>
For proper use you must be define all these methods except getArray()
Browse SPL's sources to be a very helpful think.
ps.: sry for my english
--was--
This code is an example. By using classes like this, you gives a chance to create classes which
extends another class but have most of the ability what a class extends ArrayObject (like multiple
inheritance):
<?php
class foo
{
public $foo = 'foo';
} // class
class foobar extends foo implements ArrayAccess,IteratorAggregate,Countable
{
public function offsetExists($offset)
{
$array = array(1, 2, 3, 4);
return array_key_exists($offset, $array);
}
public function offsetGet($offset)
{
$array = array(1, 2, 3, 4);
return $array[$offset];
}
public function offsetSet($offset, $value)
{
// Makes "array" to readonly
}
public function offsetUnset($offset)
{
// Makes "array" to readonly
}
function count()
{
$array = array(1, 2, 3, 4);
return count($array);
} // function
function getArray()
{
return array(1, 2, 3, 4);
} // function
function getIterator()
{
return new ArrayIterator(array(1, 2, 3, 4));
} // function
function __toString()
{
return 'String test';
} // function
} // class
$foobar = new foobar();
print $foobar[0].'<br/>';
print $foobar->foo.'<br/>';
print count($foobar).'<br/>';
foreach ($foobar as $k=>$v)
{
print $k.'=>'.$v.'<br/>';
} // foreach
var_dump($foobar->getArray());
print $foobar;
/* Generated output:
1
foo
4
foo=>foo
array
'foo' => string 'foo' (length=3)
String teszt
*/
?>
For proper use you must be define all these methods except getArray()
Browse SPL's sources to be a very helpful think.
ps.: sry for my english
http://php.net/manual/en/ref.spl.php