entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Duda al inicializar una variable en PHP

Hola a todos,

Tengo una duda, que no termino de entender, es respecto a inicializar una variable en PHP.

Yo estoy acostumbrado a declarar las variables así.

$name = $_GET['name'] || 'shadow';

Pero esto es inválido en PHP, porque me devuelve true o false, lo he solucionado así, de una manera sencilla, pero tengo mi duda de ver cómo podría hacerlo esto en PHP.

Solución:

$name = $_GET['name'];
if (!isset($name)) {$name = 'shadow';   }

En la práctica funciona, pero no estoy seguro de esto, si alguien supiera la razón, o pudiera indicar que estoy haciendo mal en mi primera parte de código estaría muy agradecido.

Un saludo y gracias por adelantado.

2 Respuestas

3votos

angelAparicio Puntos2810

Hola, entiendo que lo que quieres hacer es que $name tome el valor del GET y en caso de de no existir, un valor por defecto.

En PHP tienes que hacerlo así:

$name = isset($_GET['name']) ? $_GET['name'] : 'shadow';

Que equivale a la solución que has puesto, pero en una linea.

1voto

jrgm0005 comentado

Hola @angelAparicio,

gracias por la explicación.
Un saludo

3votos

Leonardo-Tadei Puntos227240

Hola @jrgm0005,

hace un par de años que PHP cambió el tipo de error, de un Notice a un Warning cuando se quiere acceder a una variable que no existe.

El cambio puede ser molesto, pero obliga a ser más prolijo, lo que siempre es bueno a la larga...

En este contexto, el código:

$name = $_GET['name'] || 'shadow';

falla cuando no existe la posición 'name' en el vector $_GET. El vector siempre existe porque es superglobal, pero no las posiciones que se le puedan invocar. (antes, cuando no daba un error, una variable vacía era lo mismo que falso, entonces la asignación conb OR funcionaba asignando un valor por default)

Te da el mismo error hacer algo como:

$name = $variable_iexistente;

Por otra parte, su solución también debería fallar si 'name' no tiene valor. La forma prolija de resolver esto es:

$name = 'shadow';
if (isset($_GET['name'])) {$name = $_GET['name'];   }

porque isset() no falla si recibe como parámetro una variable indeterminada.

Saludos cordiales!

PD: es bueno desarrollar poniendo en el PHP.INI las opciones de desarrollo, así se ven todos los errores, advertencias y noticias en la pantalla. Crea muy buenos hábitos.

2votos

jrgm0005 comentado

Hola @Leonardo-Tadei
muchas gracias por tu respuesta. Apenas he trabajado en PHP, ha sido ahora una solución rápida que tenía que realizar y lo hice así, pero me quedé con la inquietud del porqué no me servía mi idea inicial.

3votos

Leonardo-Tadei comentado

Por nada!

Me pareció que por ahí venía tu pregunta, y por eso más que la solución preferí ponerte una explicación detallada del comportamiento de PHP en este caso.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta