¿Asignar el mismo valor a múltiples variables a la vez?

2 minutos de lectura

avatar de usuario
usuario983248

¿Cómo puedo asignar el mismo valor para múltiples variables en PHP a la vez?

tengo algo como:

$var_a="A";
$var_b = 'A';
$same_var="A";
$var_d = 'A';
$some_var="A";

En mi caso, no puedo cambiar el nombre de todas las variables para que tengan el mismo nombre (eso facilitaría las cosas), entonces, ¿hay alguna forma de asignar el mismo valor a todas las variables de una manera mucho más compacta?

$var_a = $var_b = $same_var = $var_d = $some_var="A";

  • Brillante, funcionó perfecto para mí $level1 = $level2 = $level3 = $level4 = false;

    – geilt

    14 de marzo de 2013 a las 7:33


  • Esto no se puede usar en la clase Php y este es el tipo sin formato.

    – Chaminda Bandara

    14 de noviembre de 2016 a las 10:08

  • @ChamindaBandara, ¿qué quiere decir con que no se puede usar en una clase de PHP?

    – Eoín

    21 de junio de 2019 a las 19:05

  • @Eoin: Al hacer $var_a = $var_b = ... = new Class();todas las variables harán referencia a la misma instancia de Class.

    –Tim Cooper

    21 de junio de 2019 a las 19:34

  • ¿Es esta sintaxis compatible con PSR?

    –David Casiraghi

    8 de junio de 2020 a las 10:43

Para agregar a la otra respuesta.

$a = $b = $c = $d

en realidad significa $a = ( $b = ( $c = $d ) )

PHP pasa tipos primitivos int, string, etc. por valor y objetos por referencia por defecto.

Eso significa

$c = 1234;
$a = $b = $c;
$c = 5678;
//$a and $b = 1234; $c = 5678;

$c = new Object();
$c->property = 1234;
$a = $b = $c;
$c->property = 5678;
// $a,b,c->property = 5678 because they are all referenced to same variable

Sin embargo, también PUEDE pasar objetos por valor, usando la palabra clave clonepero tendrás que usar paréntesis.

$c = new Object();
$c->property = 1234;
$a = clone ($b = clone $c);
$c->property = 5678;
// $a,b->property = 1234; c->property = 5678 because they are cloned

PERO, NO PUEDE pasar tipos primitivos por referencia con palabra clave & usando este método

$c = 1234;

$a = $b = &$c; // no syntax error
// $a is passed by value. $b is passed by reference of $c

$a = &$b = &$c; // syntax error

$a = &($b = &$c); // $b = &$c is okay. 
// but $a = &(...) is error because you can not pass by reference on value (you need variable)

// You will have to do manually
$b = &$c;
$a = &$b;
etc.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad