Объект в массив - проблема с наследованием от ArrayObject

Andreika

"PHP for nubies" reader
Объект в массив - проблема с наследованием от ArrayObject

необходимо, чтобы объект можно было использовать как массив, причем не только для foreach. примерно так
PHP:
class A extends ArrayIterator {
	protected $b;
	public function __construct() {
		$this->b = new stdClass();
		parent::__construct($this->b);
		$this->b->a = 11;
	}
}

$arr = new A();
$c = (array)$arr;
var_dump($c);
json_encode($arr);
но с небольшими дополнениями.. до которых не получается доползти, т.к. ни при наследовании ни при реализации этих интерфейсов никакая функция (кроме конструктора) не вызывается
PHP:
class test extends ArrayObject {// or ArrayIterator or implements IteratorAggregate, ArrayAccess , Countable {
	
	protected $obj = null;
	
	public function __construct() {
	             echo __FUNCTION__;
	}
	
	public function current (  ) {
		echo __FUNCTION__;
	}
	public function  key (  ) {
		echo __FUNCTION__;
	}
	public function  next (  ) {
		echo __FUNCTION__;
	}
	public function  rewind (  ) {
		echo __FUNCTION__;
	}
	public function  seek ( $int  ) {
		echo __FUNCTION__;
	}
	public function  valid (  ) {
		echo __FUNCTION__;
	}

	public function count() {
		echo __FUNCTION__;
	}
	
	public function offsetExists (  $offset ) {
		echo __FUNCTION__;
	}
	public function offsetGet (  $offset ) {
		echo __FUNCTION__;
	}
	public function offsetSet (  $offset , $value ) {
		echo __FUNCTION__;
	}
	public function offsetUnset (  $offset ) {
		echo __FUNCTION__;
	}
	public function getIterator() {
		echo __FUNCTION__;
	}
}
$test = new test();
$t = (array)$test;
вывод: __construct

вопрос - что я делаю не так?
 

Andreika

"PHP for nubies" reader
врядли parent::__construct делает нечто такое, чтобы при приведении типа объекта к массиву пхп вызвал функцию, которую мне надо переопределить

можно сделать parent::__construct($this->object) (как в первом примере) и держать в нем копию объекта, из которого надо будет сделать массив, но хотелось бы найти другое решение

по идее, пхп должен найти в объекте какой-то интерфейс и вызвать какую-то public функцию.. а т.к. в ArrayObject/ArrayIterator все работает - предполагаю, что ArrayObject должен этот интерфейс таки реализовывать
 

cDLEON

Онанист РНРСlub
Объект в ПХП - это всё та же хеш таблица.
При касте типа меняется только тип этой хеш таблицы. Т.е. внутри неё ПХП (по переменным объекта) не гуляет.
От сюда вывод
PHP:
$obj->get_array();
 

Andreika

"PHP for nubies" reader
пока не смог понять причем тут тип хеш таблицы, как из прогулок пхп по переменным был сделан такой интересный вывод и как он относится к первоначальной задаче
 

AmdY

Пью пиво
Команда форума
тебе нужен метод __toArray() который вызызается при попытке преобразовать объект в массив.
 

Andreika

"PHP for nubies" reader
нужен, найти бы только его описание или пример использования
 
Сверху