Autor Zpráva
venca12
Profil
Ahoj, mám nějakou třídu:
class Tfoo

{
var $bar = 1;

function Tfoo()
{

}
}
vytvořím si jenu její instanci do proměnné $a a tuto proměnnou přiřadím klasicky, bez reference proměnné $b. Vlastnosti instanci v proměnné $b nastavím nějakou hodnotu a obě proměnné vypíšu.
$a = new Tfoo();

$b = clone $a;
$b->bar = 2;
print_r($a);
print_r($b);
V php4 se mi vypíše
tfoo Object

(
[bar] => 1
)
tfoo Object
(
[bar] => 2
)
a v php5
Tfoo Object

(
[bar] => 2
)
Tfoo Object
(
[bar] => 2
)
tzn. v php5 se normálním přiřazováním vytváří reference. Pokud chci přiřadit bez reference musím použít jakýsi operátor clone.

A teď dotaz: Toto je úplně normální chování?
bukaj
Profil
venca12
v php5 se normálním přiřazováním vytváří reference. Pokud chci přiřadit bez reference musím použít jakýsi operátor clone.
Toto je úplně normální chování?
Ano.
Mastodont
Profil
venca12
Že se normálním přiřazením objektu ve skutečnosti vytvoří jen reference na objekt, je běžné i v jiných jazycích. V PHP 4 se přiřazením vytvářela kopie a to lidi nějak neskousli, takže v PHP 5 je to už normálně.
venca12
Profil
Já se stydím, ale doteď jsem to nevěděl (no jo no, odkojenej na php). A teď to se mnou dvakrát vypeklo. Nejenom v php, kde jsem řešil proč se mi upravují data i v objektu, který jsem normálně přiřadil, ale i v javascriptu, kde to funguje na stejném principu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0