marca 31

Dostęp do tablic poprzez magiczną metodę __get() w PHP5

Tag: PHPMatheW @ 23:19. . Post odwiedzany 2711 razy. Trackback

Przypuśćmy, że mamy klasę i chcemy w niej za pomocą magicznej metody __get otrzymywać dostęp do pewnej tablicy:

class test {
	private $ar=array('field'=>array());	

	public function __get($name){
		return $this->ar[$name];
	}

	public function showMe(){
		var_dump($this->ar['field']);
	}
}

$a=new test;
$a->field[]='testValue';
$a->showMe();

Spodziewamy się, że za pomocą $a->field[]=’testValue’; dodamy do tablicy $a->ar['field'] wartość ‘testValue’. Jednak jak możemy się przekonać listując potem tablicę wcale tak się nie dzieje! Otóż tablice zwracane są w metodzie __get poprzez wartość, a nie referencję.

Rozwiązanie

Zamiast tablicy skorzystamy z .. obiektów, które w PHP5 zawsze są zwracane przez referencję. Doskonałym zamiennikiem zwykłej tablicy jest obiekt ArrayObject.

class test {
	private $ar=array('field'=>array());

	public function __construct(){
		$this->ar['field']=new ArrayObject;
	}

	public function __get($name){
		return $this->ar[$name];
	}

	public function showMe(){
		var_dump($this->ar['field']);
	}
}

$a=new test;
$a->field[]='testValue';
$a->showMe();

No i działa :]

Podobne wpisy

Dodaj do: Dodaj do del.icio.us Dodaj do Wykop.pl Dodaj do Google Reader lub Google IG
Licencja: Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 2.5 Polska.

Zostaw komentarz