[php5] interface arrayAcces & $this

Profic

just Profic (PHP5 BetaTeam)
[php5] interface arrayAcces & $this

Код:
PHP:
class arr implements arrayAccess {
	private $a = array ();

	public function setA () {
		$this['key'] = 'val';
	}

	public function offsetExists ($offset) {
		echo 'Checking existens of offset ' . $offset . '<br>';
		return array_key_exists ($offset, $this->a);
	}

	public function offsetGet ($offset) {
		echo 'Getting offset ' . $offset . '<br>';
		return $this->a[$offset];
	}

	public function offsetSet ($offset, $value) {
		$this->a[$offset] = $value;
		return true;
	}

	public function offsetUnset ($offset) {
		echo 'Unsetting offset ' . $offset . '<br>';
		unset ($this->a[$offset]);
		return true;
	}
}

$o = new arr ();
$o->setA ();
var_dump ($o);
Так вот в методе setA () не происходит установка массива. Вообще. Даже методы не вызываются. Так и должно быть?
Я конечно могу использовать
$this->offsetSet ('key', 'val');
или
$temp = $this;
$temp['key'] = 'val';
но это имхо криво.

Я прав или я не должен хотеть применения массивов на $this?
 

Baboon

Guest
Имхо так заработает:
PHP:
public function setA ()
{
  // $this['key'] = 'val';
  $this->a['key'] = 'val';
}
Хотя может я не понял чего...
 

Profic

just Profic (PHP5 BetaTeam)
Угу немного не понял. Я зачем имплементил интерфейс ArrayAccess? Так я могу и arrayAccess не использовать. Меня интересует не устанока напрямую (учитывая, что проиходить она будет в классах-потомках), а как-нить через arrayAccess..
 

Baboon

Guest
Умм... Понял. Извини что влез - не знаю я как сделать то, что ты хочешь. :(
 

tony2001

TeaM PHPClub
Profic
с SPL я глубоко не разбирался, но если логически размышлять, то да, хотеть ты этого не должен.
ArrayAccess нужен для того, чтобы объект "эмулировал" поведение массива, но внутри-то он все равно объект, так?

-~{}~ 13.07.04 10:34:

Baboon
это уже не первый раз.
становишься кандидатом в ReadOnly Team.
 

Profic

just Profic (PHP5 BetaTeam)
tony2001
ок, понятно. Тогда буду в зависимости от ситуации либо offset* юзать либо свойство-ссылку на себя :)

мне просто интуитивно хотелось универсальности представления, чтобы из любового контекста можно было использовать "массивные" операторы. Но видимо мыслю я немного нестандартно :)
 
Сверху