operator - Shorthand condicional para definir una variable basada en la existencia de otra variable en PHP
php ternary operator shorthand (3)
Esencialmente, me encantaría poder definir una variable como una sola cosa a menos que esa cosa no exista. Juro que en algún lugar vi una taquigrafía condicional que parecía algo así:
$var=$_GET["var"] || "default";
Pero no puedo encontrar ninguna documentación para hacer esto bien, y honestamente podría haber sido JS o ASP o algo donde lo vi.
Entiendo que todo lo que debería estar sucediendo en el código anterior es solo para verificar si alguna de las declaraciones devuelve verdadero. Pero pensé que vi a alguien hacer algo que esencialmente define un defecto si el primero falla. ¿Es esto algo que alguien sabe y puede ayudarme? ¿Estoy loco? Simplemente parece redundante decir:
$var=($_GET["var"]) ? $_GET["var"] : "default";
O especialmente redundante para decir:
if ($_GET["var"]) { $var=$_GET["var"]; } else { $var="default"; }
¿Pensamientos?
En tales casos, debe verificar la existencia de la variable en $ _GET y luego si es válida para sus parámetros. Por ejemplo:
$var = (isset($_GET["var"]) && $_GET[''var''] !== '''') ? $_GET["var"] : "default";
Sin embargo, esto puede volverse bastante ilegible bastante rápidamente. Yo diría que manténgalo legible inicializando primero su variable a un valor predeterminado seguro, y luego sobrescribiéndola con una externa, si eso es válido:
$var = "default";
if (isset($_GET[''var'') && $_GET[''var''] !== '''') {
$var = $_GET[''var] ;
}
En cuanto a su primer ejemplo, $var=$_GET["var"] || "default";
$var=$_GET["var"] || "default";
existe en Javascript: var someVar = incomingVar || "default";
var someVar = incomingVar || "default";
Matthew ya ha mencionado la única forma de hacerlo en PHP 5.3. Tenga en cuenta que también puede encadenarlos:
$a = false ?: false ?: ''A''; // ''A''
Esto no es lo mismo que:
$a = false || false || ''A''; // true
La razón por la cual es que PHP es como la mayoría de los lenguajes tradicionales en este aspecto. El OR lógico siempre devuelve true
o false
. Sin embargo, en JavaScript, se utiliza la expresión final. (En una serie de RUP, será la primera no falsa).
var a = false || ''A'' || false; // ''A''
var b = true && ''A'' && ''B''; // ''B'';
Siempre he usado el vacío.
$var = !empty($_GET[''var''])?$_GET[''var'']:''default'';