Comunidad de diseño web y desarrollo en internet online

Duda condicional ternario

Citar            
MensajeEscrito el 26 May 2015 09:32 pm
Hola amigos, a ver si alguien me sabe responder si es posible especificar en un condicional ternario mas de una instruccion y anidarlos

Por ejemplo en as3 es posible hacer algo tan maravilloso como esto:

Código ActionScript :

var flag1:int = 1;

flag1 ? [trace("1"),trace("2")]:[trace("3"),trace("4")];

//Equivale a lo siguiente
if(flag1){
   trace("1");
   trace("2");
}else{
   trace("3");
   trace("4");
}


//O por ejemplo

var flag2:int = 1;
var result:String ="";
flag1 ? [trace("1"),trace("2")]:[trace("3"),trace("4"),flag2 ? [result ="5"]:[result ="6"],trace(result)];

//Equivale a lo siguiente
if(flag1){
   trace("1");
   trace("2");
}else{
   trace(3");
   trace("4");
        if(flag2){
           result ="5";
        }else{
           result ="6";
       }
       trace(result);
}



Es posible en php?

lo he intentado pero no hay manera solo puedo hacer que me devuelva un resultado

Código PHP :

$result = $flag ? 'true' : 'false';

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

firefox
Citar            
MensajeEscrito el 27 May 2015 09:26 am
Hola, giskard,

El operador ternario en PHP( y en JAVA, C++, etc ) sólo se utiliza para devolver valores. Para lo otro, tienes un if.
De hecho, el operador ternario se recomienda su uso en muy contadas ocasiones porque dificultad la comprensión del código.

Lo que podrías es crear una función que tomará varios id y los convirtiera a trace. Ej:
function ntrace(...$traces) {
foreach($traces as $id) trace($id);
}

con esa función podrías hacer:
if(flag1)
ntrace(1,2);
else {
ntrace(3,4);
if(flag2)
trace(5);
else
trace(6);
}

más info:
http://php.net/manual/es/functions.arguments.php#functions.variable-arg-list

Por trasweb

17 de clabLevel



 

Programador Web A Medida

firefox
Citar            
MensajeEscrito el 27 May 2015 12:14 pm
Tener en cuenta que esta sintaxis:

Código PHP :

function ntrace(...$traces) {

Está disponible en PHP 5.6, en versiones anteriores no funciona.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 May 2015 01:09 pm
DriverOp tiene razón, pero era para escribir poco código( a veces soy un poco flojo ). Sin embargo, es posible hacer lo mismo en versiones anteriores con:
http://php.net/manual/es/function.func-get-args.php

function ntrace() {
$traces = func_get_args();
foreach($traces as $id) trace($id);
}

Por trasweb

17 de clabLevel



 

Programador Web A Medida

firefox
Citar            
MensajeEscrito el 27 May 2015 01:11 pm
Aprovecho para mejorar el if que proponías, giskard:
( usando la función ntrace dada anteriormente )

if(flag1) ntrace(1,2); else if(flag2) ntrace(3,4, 5); else ntrace(3,4, 6);

Por trasweb

17 de clabLevel



 

Programador Web A Medida

firefox
Citar            
MensajeEscrito el 27 May 2015 02:31 pm
Gracias por la ayuda, al final no he tenido más remedio que usar if, ya sé que el condicional ternario puede resultar difícil de interpretar, pero a mí me gusta, incluso en situaciones donde se repite mucho un patrón de sentencias if parecidas se me hace mejor para interpretar y para tener el código recogidito si utilizo el condicional ternario. pero ya digo solo en segun que casos, por regla general uso la sentencia if normal.

tenia mas de 300 if en el formato normal y me ocupaban una burrada de espacio al final lo he pasado todo al siguiente formato.


Código PHP :

if(ex('A',$dS)||$flag){require $Ab.'dir1/z/class.File1.php'; $CL[]=array(new File1(),'A');}
if(ex('B',$dS)||$flag){require $Ab.'dir1/a/class.File2.php'; $CL[]=array(new File2(),'B');}
if(ex('C',$dS)||$flag){require $Ab.'dir2/z/class.File3.php'; $CL[]=array(new File3(),'C');}
if(ex('D',$dS)||$flag){require $Ab.'dir4/b/class.File4.php'; $CL[]=array(new File4(),'D');}
//etc

//Pero me hubiera gustado que se pudiera haber utilizado el condicional ternario en vez del if, no se manías mías con el código.

(ex('A',$dS)||$flag) ? require $Ab.'dir1/z/class.File1.php', $CL[]=array(new File1(),'A') : "";
(ex('B',$dS)||$flag) ? require $Ab.'dir1/a/class.File2.php', $CL[]=array(new File2(),'B') : "";
(ex('C',$dS)||$flag) ? require $Ab.'dir2/z/class.File3.php', $CL[]=array(new File3(),'C') : "";
(ex('D',$dS)||$flag) ? require $Ab.'dir4/b/class.File4.php', $CL[]=array(new File4(),'D') : "";


Soy rarito me gusta usar el condicional ternario pero luego no me gusta utilizar las sentencias if sin especificar las llaves de apertura y cierre me cuesta más interpretar el código sin ellas.

Tampoco me gusta la moda de poner la llave de apertura en la siguiente línea después del nombre de función uff lo odio.. :D

Esto para mi es horrendo, me produce dolor de cabeza y sin llaves aun me gusta menos

Código PHP :

if($a)
{
echo $a;
}
else
{
echo $a;
}


Bueno gracias por la ayuda saludos

:)

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.