ternario operador anidados anidado php

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. :)



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 .

Shell en línea .