2017-03-22 2 views
1

ich verwende diesen Code:Warum Objekt geändert wird, wenn ich das nicht anfasse?

$source= (object) array('next'=>'hi', 'val'=>'bye'); 
$next= (object) array('val'=>'hello'); 
$source->next=$next; 
    var_dump($next->val);  // <----------------------- outputs "hello" 
$source->next->val = $source->val; 
    var_dump($next->val);  // <----------------------- outputs "bye" 
exit; 

können Sie mir sagen, warum die $next variable Ausgänge verschiedene Werte (ich meine, warum es überhaupt berührt wurde ??? i nicht $next = .... Erklärung dort verwendet haben

Antwort

2

Auf dieser Linie

$source->next=$next; 

Sie vergeben die Adresse, also sind die Objekte standardmäßig die Adresse, die auf $source->next zeigt.

Wenn Sie das erste Mal var_dump($next->val) -> seinen Wert hat sich noch nicht geändert, weisen Sie einfach $next zu $source->next. In der nächsten Zeile ändern Sie den Wert $source->next->val, der auf $next zeigt. Also Wert bei $next Variable wird ändern.

Ich hoffe, ich bin klar, und das wird Ihnen helfen.

+0

ja, ich wusste nicht, dass das Objekt, standardmäßig, wurde von Adresse übergeben ... Ich dachte, es war separate Variable zugewiesen .. –

0

Hier ist die Linie, wo Sie es änderte und ganz explizit.

$source->next->val = $source->val; 
Verwandte Themen