⊗ppOpAdPBR 23 of 107 menu

Passaggio di oggetti per riferimento in OOP in PHP

Supponiamo di avere questa classe User:

<?php class User { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Supponiamo di creare un oggetto di questa classe:

<?php $user = new User('john', 30); ?>

Immaginate ora la seguente situazione: volete assegnare il valore della variabile $user a un'altra variabile, ad esempio $test.

Se non si trattasse di oggetti, ma di primitivi, cioè stringhe, numeri, array, ecc., allora nella variabile $test verrebbe inserita una copia del valore della variabile $user.

Ciò significa che le modifiche a una qualsiasi delle variabili in seguito non cambierebbero il valore dell'altra variabile. Vediamo un esempio:

<?php $user = 1; $test = $user; // nella variabile $test ora c'è 1 $test = 2; // nella variabile $test ora c'è 2, mentre in $user - rimane 1 ?>

Con gli oggetti è diverso - quando si assegna a un'altra variabile, gli oggetti non vengono copiati, ma passati per riferimento: ciò significa che entrambe queste variabili hanno come valore lo stesso identico oggetto. Questo ha un'importante conseguenza: se si modificano alcune proprietà dell'oggetto con una variabile, nella seconda variabile appariranno queste stesse modifiche.

Vediamo in pratica. Creiamo un oggetto con l'utente:

<?php $user = new User('john', 30); ?>

Assegniamo l'oggetto a un'altra variabile:

<?php $test = $user; ?>

Modifichiamo la proprietà name nella variabile $test

<?php $test->name = 'eric'; ?>

Verifichiamo che l'oggetto condiviso sia cambiato. Stampiamo la proprietà name dalla variabile $user:

<?php echo $user->name; // stamperà 'eric'! ?>

Create una classe Product, in cui ci siano le seguenti proprietà: name, price.

Create un oggetto della classe Product, assegnatelo alla variabile $product1.

Assegnate il valore della variabile $product1 alla variabile $product2. Verificate che entrambe le variabili si riferiscano allo stesso identico oggetto.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta