Co jste možná nevěděli o PHP: zapouzdření

Během učení se Smalltalku na diplomku jsem narazil na jednu zajímavost. Programovací jazyky z rodiny C (C, C++, Java, PHP) mají zapouzdření objektů na úrovni tříd, ne instancí (jako třeba Smalltalk).

V praxi to znamená, že pokud má objekt foo1 privátní instanční proměnnou boo, není tato proměnná přístupná zvenčí, ale je přístupná z objektu foo2, který je potomkem stejné třídy jako foo1.

Jednoduchá ukázka:

class Test
{
	private $x;
	public function __construct($val) { $this->x = $val; }
	public function changeNeighbour($n, $val) { $n->x = $val; }
	public function getX() { return $this->x; }
}

$a = new Test(5);
$b = new Test(1);

$b->changeNeighbour($a, 2);
echo $a->getX(); //vypise 2

Přiznejte se, vědeli jste to? :)