⊗ppOpAdPBR 23 of 107 menu

Paso de objetos por referencia en POO en PHP

Supongamos que tenemos la siguiente clase User:

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

Supongamos que creamos un objeto de esta clase:

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

Imagina ahora la siguiente situación: quieres asignar el valor de la variable $user a alguna otra variable, por ejemplo $test.

Si no estuviéramos hablando de objetos, sino de primitivos, es decir, de cadenas, números, arrays, etc., entonces la variable $test obtendría una copia del valor de la variable $user.

Esto significa que los cambios en cualquiera de las variables en el futuro no cambiarían el valor de la otra variable. Veamos un ejemplo:

<?php $user = 1; $test = $user; // en la variable $test ahora hay 1 $test = 2; // en la variable $test ahora hay 2, y en $user - todavía 1 ?>

Con los objetos es diferente - al asignarlos a otra variable, los objetos no se copian, sino que se pasan por referencia: esto significa que ambas variables tienen como valor un mismo objeto. Esto tiene una consecuencia importante: si se cambian algunas propiedades del objeto usando una variable, en la segunda variable aparecerán estos mismos cambios.

Veámoslo en la práctica. Creemos un objeto con un usuario:

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

Asignemos el objeto a otra variable:

<?php $test = $user; ?>

Cambiemos la propiedad name en la variable $test

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

Comprobemos que el objeto compartido ha cambiado. Mostremos la propiedad name desde la variable $user:

<?php echo $user->name; // ¡mostrará 'eric'! ?>

Crea la clase Product, en la cual haya las siguientes propiedades: name, price.

Crea un objeto de la clase Product, guárdalo en la variable $product1.

Asigna el valor de la variable $product1 a la variable $product2. Verifica que ambas variables referencian al mismo objeto.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar