2007-11-10

Rozdíly v přiřazení objektů v php4 a php5

Napíšu si nějakou třídu a z ní vytvořím do proměnné objekt. Ten potom přiřadím jiné proměnné a nastavím objektu v ní nějakou hodnotu vlastnosti.

class Tfoo {
var $bar = 1;
function Tfoo() {
}
}
$a = new Tfoo();
$b = $a;
view raw Tfoo.php hosted with ❤ by GitHub

Výsledky vypíšu pomocí funkce print_r.

print_r($a);
print_r($b);
view raw print_r.php hosted with ❤ by GitHub

Php4 vypíše

tfoo Object
(
    [bar] => 1
)
tfoo Object
(
    [bar] => 2
)

Php5 vypíše

Tfoo Object
(
    [bar] => 2
)
Tfoo Object
(
    [bar] => 2
)

protože se přiřazením objektů vytvořila reference. Aby obojí fungovalo stejně musím k přiřazení v php5 přidat

$b = clone $a;

Zajímavé také je, že php5 vypíše správně velikost písmen v názvu třídy.