Нет официального пути? Конечно, есть! Unset !
<?php
class foo
{
var $items = array();
function add_item($id) {
$this->items[$id] = new myitem($id);
}
function remove_item($id)
{
unset( $this->items[$id] );
}
function get_count() {
return count($this->items);
}
}
class myitem
{
function myitem( $id )
{
// nothing
}
}
$f = new foo();
$f->add_item( 1 );
$f->add_item( 2 );
$f->remove_item( 1 );
echo $f->get_count();
Кроме того, это PHP4? Потому что, если нет, вам следует изучить некоторые из компонентов SPL, такие как ArrayObject или хотя бы интерфейсы Countable и ArrayAccess .
EDIT
Вот версия, использующая интерфейсы напрямую
<?php
class foo implements ArrayAccess, Countable
{
protected $items = array();
public function offsetExists( $offset )
{
return isset( $this->items );
}
public function offsetGet( $offset )
{
return $this->items[$offset];
}
public function offsetSet( $offset, $value )
{
$this->items[$offset] = $value;
}
public function offsetUnset( $offset )
{
unset( $this->items[$offset] );
}
public function count()
{
return count( $this->items );
}
public function addItem( $id )
{
$this[$id] = new myitem( $id );
}
}
class myitem
{
public function __construct( $id )
{
// nothing
}
}
$f = new foo();
$f->addItem( 1 );
$f->addItem( 2 );
unset( $f[1] );
echo count( $f );
А вот версия как реализация ArrayObject
<?php
class foo extends ArrayObject
{
public function addItem( $id )
{
$this[$id] = new myitem( $id );
}
}
class myitem
{
public function __construct( $id )
{
// nothing
}
}
$f = new foo();
$f->addItem( 1 );
$f->addItem( 2 );
unset( $f[1] );
echo count( $f );