php - anidados - operador ternario anidado java
Usando operadores ternarios anidados (7)
A partir de php 7
podemos utilizar el operador coalescente nulo.
$selectedTemplate = $_POST[''selectedTemplate'']) ?? $_GET[''selectedTemplate''] ?? 0;
He estado tratando de usar isset()
en forma anidada como a continuación:
isset($_POST[''selectedTemplate''])?$_POST[''selectedTemplate'']:isset($_GET[''selectedTemplate''])?$_GET[''selectedTemplate'']:0
Pero parece que me estoy perdiendo algo. ¿Alguien puede ayudarme a hacerlo?
Creo que esto funcionará:
$test = array();
$test[''a''] = 123;
$test[''b''] = NULL;
$var = (isset($test[''a'']) ? $test[''a''] : (!isnull($test[''b'']) ? $test[''b''] : "default"));
echo $var;
En lugar de la ternaria con la ambigua precedencia, simplemente podría usar $_REQUEST
lugar del fiddly $ _GET y $ _POST sondeo:
isset($_REQUEST[''selectedTemplate'']) ? $_REQUEST[''selectedTemplate''] : 0
Esto es precisamente para lo que es.
Envuélvalo entre paréntesis:
$selectedTemplate = isset($_POST[''selectedTemplate''])
? $_POST[''selectedTemplate'']
: (
isset($_GET[''selectedTemplate''])
? $_GET[''selectedTemplate'']
: 0
);
O incluso mejor, use una declaración adecuada if
/ else
(para mantenimiento):
$selectTemplate = 0;
if (isset($_POST[''selectedTemplate''])) {
$selectTemplate = $_POST[''selectedTemplate''];
} elseif (isset($_GET[''selectedTemplate''])) {
$selectTemplate = $_GET[''selectedTemplate''];
}
Sin embargo, como otros han señalado: simplemente sería más fácil para usted usar $_REQUEST
:
$selectedTemplate = isset($_REQUEST[''selectedTemplate''])
? $_REQUEST[''selectedTemplate'']
: 0;
Es más fácil de leer si escribimos ternario de la siguiente manera:
$myvar = ($x == $y)
?(($x == $z)?''both'':''foo'')
:(($x == $z)?''bar'':''none'');
Pero los operadores ternarios son formas cortas y efectivas de escribir sentencias simples. No están construidos para anidar. :)
Podrías tener un tiempo más fácil simplemente usando las variables $ _REQUEST:
"$ _REQUEST es una matriz asociativa que, de forma predeterminada, contiene los contenidos de $ _GET, $ _POST y $ _COOKIE".
Un poco de investigación aquí, y supongo, he encontrado respuesta real :)
Código de ejemplo:
<?php
$test = array();
$test[''a''] = "value";
var_dump(
isset($test[''a''])
? $test[''a'']
: isset($test[''b''])
? $test[''b'']
: "default"
);
Esté atento a los soportes redondos, que he puesto.
Supongo que estás esperando un comportamiento similar:
var_dump(
isset($test[''a''])
? $test[''a'']
: (isset($test[''b'']) // <-- here
? $test[''b'']
: "default") // <-- and here
);
¡Pero! El comportamiento real se ve así:
var_dump(
(isset($test[''a'']) // <-- here
? $test[''a'']
: isset($test[''b''])) // <-- and here
? $test[''b'']
: "default"
);
El error general fue que te has perdido el aviso: índice indefinido .