Dlaczego zmieniło property danego obiektu?

0

Nie wiem dlaczego zmieniło property $name od $book2. Obiekty nie są przekazywane jako wartość?

Link do kodu http://sandbox.onlinephpfunctions.com/code/7e54cb6532275c3b60137a528e5669bc93799b19

0

Są, ale w wypadku obiektów tą wartością jest referencja do tego obiektu, a nie jego kopia.

Jakiego zachowania się spodziewałeś?

0

Spodziewałem się obiektu przekazanego jako wartość/tylko do odczytu.

0

W PHP - domyślnie - zmienne są przekazywane przez wartość. Jeżeli przekazujesz typ prosty, to jest to dosyć jasne. W przypadku obiektów tą wartością jest referencja do tego obiektu. Dzięki temu wewnątrz funkcji możesz zmodyfikować obiekt (bo masz do niego referencje), ale nie możesz go nadpisać.

<?php

$foo = new stdClass(); // foo trzyma referencje do tego konkretnego obiektu stdClass
$foo->zmienna = 1;
$bar = $foo; // teraz bar ma tą samą referencję
$bar->zmienna = 2;

var_dump($foo, $bar);

$a = 1;
$b = $a; // kopiujemy wartość
$b = 2;
var_dump($a, $b);

$dirtyA = 1;
$dirtyB =& $dirtyA;
$dirtyB = 2;

var_dump($dirtyA, $dirtyB); // no niestety :/

Niestety w PHP jest taki gówniany operator &$zmienna, który Ci na to pozwala...

<?php

function modify(int &$number)
{
	$number = 'foo';
}

$number = 1;
var_dump($number); // tu mamy 1

modify($number);

var_dump($number); // a tu 'foo' :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1