Forum


Replies: 2   Views: 958
Asignación por referencia en vez de por valor
Topic closed:
Please note this is an old forum thread. Information in this post may be out-to-date and/or erroneous.
Every phpdocx version includes new features and improvements. Previously unsupported features may have been added to newer releases, or past issues may have been corrected.
We encourage you to download the current phpdocx version and check the Documentation available.

Posted by rmartinez  · 10-11-2021 - 07:32

Buenos días.

Tras la ejecución de las siguientes líneas, las variables $a y $b contienen el mismo valor:

$a = new WordFragment($docx, 'document');
$a->addText('Primer párrrafo');
$b = $a;
$a->addText('Segundo párrrafo');

De alguna manera, en vez de asignar el valor de $a a la variable $b, le asigna la referencia de la variable $a.

Puedo entender que esto deba funcionar así pero, ¿cómo podría asignar el valor de $a a $b sin que esta última varíe cuando modifique la variable $a?

Gracias.

Saludos.

Posted by admin  · 10-11-2021 - 09:40

Hola,

Ese es el funcionamiento predeterminado de PHP. Los objetos son pasados por referencia, no por valor.

Puedes utilizar la función clone de PHP (https://www.php.net/manual/en/language.oop5.cloning.php):

$a = new WordFragment($docx, 'document');

$a->addText('Primer parrrafo');
$b = clone $a;
$a->addText('Segundo parrrafo');

Aunque las últimas versiones de PHP 8 están añadiendo restricciones en el clonado de objetos que contengan elementos DOM.

Saludos.

Posted by rmartinez  · 10-11-2021 - 09:46

Ok, no lo sabía.

Si vamos a tener problemas luego con el php8, lo mismo prefiero repetir acciones en dos variables antes de clonar objetos.

Muchas gracias.

Saludos.