name - tipos de variables php
Forma correcta de declarar mĂșltiples vars en PHP (7)
$ a = [''foo'', ''bar'', ''ping'', ''pong'']; foreach ($ a as $ v) $$ v = '''';
//;)
He estado codificando guiones personales durante años en PHP y me acostumbré a desactivar la visualización de errores. Estoy a punto de lanzar algunos de estos scripts y me gustaría hacerlo de la manera correcta.
La única razón por la que desactivo la visualización de errores es para evitar tener que probar cada var, antes de usarla, gracias a isset ().
Ésta es mi pregunta:
¿Hay una mejor manera de declarar varios vars que esto?
<?php
// at the begining of my main file
if (!isset($foo)) ($foo = '''');
if (!isset($bar)) ($bar = '''');
if (!isset($ping)) ($ping = '''');
if (!isset($pong)) ($pong = '''');
// etc. for every single var
?>
Algo como esto, por ejemplo:
<?php
var $foo, $bar, $ping, $pong;
?>
¡Su intento de if()
con isset()
es la forma correcta de hacerlo!
Pero puede escribirlo un poco más corto / más legible, utilizando el Operador Ternario :
$foo = isset($foo) ? $foo : '''';
El primer $foo
se establecerá en el valor después de ?
cuando la condición después de =
es verdadera, de lo contrario se establecerá en el valor después de :
La condición (entre =
y ?
) Siempre se convertirá en booleana.
Desde PHP 5.3 puedes escribirlo aún más corto :
$foo = isset($foo) ?: '''';
Esto establecerá $foo
en TRUE
o FALSE
(dependiendo de lo que isset()
devuelva), tal como señala @Decent Dabbler en los comentarios. La eliminación de isset()
lo establecerá en ''''
pero también arrojará un aviso de variable indefinida (aunque no en producción).
Desde PHP 7 puedes usar un operador de coalescencia nulo:
$foo = $foo ?? '''';
Esto no generará ningún error, pero se evaluará como TRUE
si $foo
existe y está vacío, a diferencia del operador ternario de taquigrafía, que evaluará como FALSE
si la variable está vacía.
¿Por qué no solo configurarlos?
<?php
$foo = '''';
$bar = '''';
//etc
?>
Si intentas preservar el valor en ellos, entonces esa es la forma correcta en general. Tenga en cuenta que no necesita el segundo par de corchetes en sus estados de cuenta:
if (!isset($foo)) $foo = '''';
es suficiente.
Lo publiqué en un comentario anterior, pero alguien sugirió que lo envíe como respuesta.
La forma más corta y simple en que puedo pensar es hacer:
$foo = $bar = $ping = $pong = '''';
A menudo prefiero configurar cosas en falso, en lugar de una cadena vacía, para que siempre puedas hacer comprobaciones en el futuro con === falso, pero eso es solo una preferencia y depende de cómo uses estas variables y para qué.
Para solucionar el problema de
<?php
$foo = $bar = $ping = $pong = '''';
?>
lanzamiento
Aviso: variable indefinida: ...
<?php
@$foo = $bar = $ping = $pong = '''';
?>
No lo arreglará, pero no se mostrará y no detendrá la secuencia de comandos de análisis.
Una forma un tanto redonda de hacer esto es si coloca el nombre de sus variables en una matriz y luego las powtac
con un Operador Ternario, similar a la respuesta de powtac
.
$vars = array(''foo'', ''bar'', ''ping'', ''pong'');
$defaultVar = '''';
foreach($vars as $var)
{
$$var = isset($$var) ? $$var : $defaultVar;
}
Como se menciona en otras respuestas, desde la versión 5.3, PHP le permite escribir el código anterior de la siguiente manera:
$vars = array(''foo'', ''bar'', ''ping'', ''pong'');
$defaultVar = '''';
foreach($vars as $var)
{
$$var = isset($$var) ?: $defaultVar;
}
Tenga en cuenta el operador ternario cambiado.
<?php
$foo = $bar = $ping = $pong = '''';
?>
Si es su script y sabe qué variables usa, ¿por qué quiere gastar recursos para comprobar si la variable fue declarada antes?