Reference a odkazování na objekty v PHP5
Reference objektů v PHP je užitečná věc, ale jen když víme jak to funguje. V opačném případě, bychom se mohli divit. Reference od verze PHP5 fungují jinak.
Dalším krokem k OOP v php byla verze PHP5. Dochází tady k jedné hlavní změně a to je v referencích na objekty, které jsou odkazovány automaticky.
Co to znamená? V PHP4 pokud jsme chtěli odkázat na nějaký objekt v paměti již uložený a sdílet tak pod jinou proměnnou její vlastnosti, ty aktuální i v budoucnu nastavené, museli jsme použít &.
- <?
- class A {
- public $classname, $x;
- public function __construct($x) {
- $this->classname=__CLASS__;
- $this->x=$x;
- }
- }
- $a=new A("instance A");
- $b=$a;
- $b->x="instance B";
- print_r($a);
- echo "<br/>";
- print_r($b);
- ?>
Výsledkem v PHP5 je:
- A Object ( [x] => instance B )
- A Object ( [x] => instance B )
Zatímco v PHP4 je výsledek takovýto:
- A Object ( [x] => instance A )
- A Object ( [x] => instance B )
Aby jsme v PHP4 dosáhli stejného výsledku jako v PHP5, museli jsme zapsat přirovnání takto $b=&$a.
Je důležité si uvědomit důsledky referencí a to je především změna vlastností globálně napříč všemi odkazovanými objekty. Tedy pokud cokoli změníme v jakémkoli odkazovaném objektu zároveň změním všechny odkazované objekty.
Reference se například využívají při návrhových vzorech. Zejména je na něm postaven návrhový vzor Singleton.
A jak naopak kopírovat objekty v PHP5 se dozvíte v článku Kopírování objektů v PHP a funkce __clone.
podobné články
| 09.03.2008 | Kopírování objektů v PHP a funkce __clone | (20%) |
komentáře
RSS Komentáře



Pěkně a stručně vysvětleno.