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? :)