2016-08-30 22 views
6

Tutaj metoda i zmienna klasy ucznia zostają uszkodzone i obecne w innym obiekcie, np. $ Obj1, dlaczego tak się dzieje?Dlaczego obiekty automatycznie dziedziczą wartości z innego obiektu zainicjowanego przed lub po?

class Student { 
    public $name; 
    public $age; 
    public function callme() { 
     return 'called'; 
    } 
} 

$obj = new Student(); 
$obj1 = $obj; 
$obj->name = 'David'; 
$obj->age = 12; 
echo '<pre>'; 
print_r($obj); 
print_r($obj1); 
echo $obj1->callme(); 

ouput:

Student Object 
(
    [name] => David 
    [age] => 12 
) 
Student Object 
(
    [name] => David 
    [age] => 12 
) 
called 

Odpowiedz

3

Takie zachowanie jest wyjaśnione here, kiedy należy wykonać następujące czynności:

$obj = new Student(); 
$obj1 = $obj; 

$obj1 jest rzeczywiście odniesienie do $obj więc wszelkie zmiany będą widoczne na oryginalnym obiektem. Jeśli potrzebujesz nowego obiektu, a następnie zadeklarować jeden raz za pomocą słowa kluczowego new (jak to co to jest za) jako takie:

$obj = new Student(); 
$obj1 = new Student(); 

(Również widzę @Wizard pisał mniej więcej to samo półmetku mnie pisanie tego ale zostawię to tutaj ze względu na przykłady)