Foros del Web » Programando para Internet » PHP »

De operador Ternario a operador fusión de null

Estas en el tema de De operador Ternario a operador fusión de null en el foro de PHP en Foros del Web. Por lo que estoy viendo parece que "strtolower(array_shift($ruta))" no se puede usar directamente en el "Operador de fusión de null" Código PHP: $this -> metodo ...
  #1 (permalink)  
Antiguo 23/12/2016, 06:53
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 10 meses
Puntos: 9
De operador Ternario a operador fusión de null

Por lo que estoy viendo parece que "strtolower(array_shift($ruta))" no se puede usar directamente en el "Operador de fusión de null"

Código PHP:
$this->metodo=$ruta?strtolower(array_shift($ruta)):'index'
Código PHP:
$this->metodo=strtolower(array_shift($ruta))??'index'
  #2 (permalink)  
Antiguo 23/12/2016, 09:41
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: De operador Ternario a operador fusión de null

Tenia entendido que el operador ?? no funciona en php, ademas array_shift retorna un array y strtolower requiere de un string
__________________
Rodrigo Agüero
  #3 (permalink)  
Antiguo 23/12/2016, 10:25
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 9 años
Puntos: 86
Respuesta: De operador Ternario a operador fusión de null

Cita:
Iniciado por Rodrhigo Ver Mensaje
Tenia entendido que el operador ?? no funciona en php, ademas array_shift retorna un array y strtolower requiere de un string
El operador de fusión ha sido añadido en php7 http://php.net/manual/es/migration70.new-features.php. array_shift retorna el elemento eliminado http://php.net/manual/es/function.array-shift.php
  #4 (permalink)  
Antiguo 23/12/2016, 11:11
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Respuesta: De operador Ternario a operador fusión de null

Cierto es que array_shift retorna el elemento quitado, y también este es un array. Puedes hacer la prueba tu mismo si quieres.

Código PHP:
Ver original
  1. <?php
  2. $stack = array("naranja", "plátano", "manzana", "frambuesa");
  3. $fruit = array_shift($stack);
  4. print_r($stack);
  5. print_r($fruit);
  6. ?>

Por lo que Rodrhigo, tiene razón en el fallo que indica, ya que strtolower solo acepta String.
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 23/12/2016, 13:14
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
De acuerdo Respuesta: De operador Ternario a operador fusión de null

Cita:
Iniciado por xerifandtomas Ver Mensaje
Cierto es que array_shift retorna el elemento quitado, y también este es un array. Puedes hacer la prueba tu mismo si quieres.

Código PHP:
Ver original
  1. <?php
  2. $stack = array("naranja", "plátano", "manzana", "frambuesa");
  3. $fruit = array_shift($stack);
  4. print_r($stack);
  5. print_r($fruit);
  6. ?>

Por lo que Rodrhigo, tiene razón en el fallo que indica, ya que strtolower solo acepta String.
Me había equivocado, el operador fue añadido en PHP 7 y array_shift efectivamente retorna el elemento quitado($mixed / lo que sea) y no un array --> var_dump($fruit);


Con respecto al problema, si estas usando PHP 7 se puede deber a que strtolower devuelve empty cuando ingresas null entonces cuando array_shift te devuelve null strtolower te lo transforma a empty y por ende al ser distinto de null, devuelve este valor.
Código PHP:
Ver original
  1. $ejemplo = strtolower(null);//devuelve empty => ""
  2. echo $ejemplo ?? 'No Imprimo este valor, porque la variable $ejemplo NO es NULL, es Empty';
__________________
Rodrigo Agüero
  #6 (permalink)  
Antiguo 23/12/2016, 13:21
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 9 años
Puntos: 86
Respuesta: De operador Ternario a operador fusión de null

Cita:
Iniciado por xerifandtomas Ver Mensaje
Cierto es que array_shift retorna el elemento quitado, y también este es un array. Puedes hacer la prueba tu mismo si quieres.

[.......]

Por lo que Rodrhigo, tiene razón en el fallo que indica, ya que strtolower solo acepta String.
arrya_shitf elimina el primer elemento del array y lo retorna en formato string. Ya que tomas como ejemplo el código que aparece en el tutorial, te invito a que lo pruebes
Código PHP:
Ver original
  1. <?php
  2. $stack = array("NARANJA", "plátano", "manzana", "frambuesa");
  3. print_r(strtolower(array_shift($stack))); // naranja
  4. ?>
  #7 (permalink)  
Antiguo 24/12/2016, 08:04
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Respuesta: De operador Ternario a operador fusión de null

Cita:
Iniciado por mpozo Ver Mensaje
arrya_shitf elimina el primer elemento del array y lo retorna en formato string. Ya que tomas como ejemplo el código que aparece en el tutorial, te invito a que lo pruebes
Efectivamente tienes razón, reconozco que estaba equivocado en el ejemplo que puse retorna un string.
Código PHP:
Ver original
  1. <?php
  2. $stack = array("NARANJA", "plátano", "manzana", "frambuesa");
  3. print_r(array_shift($stack)); // naranja
  4. ?>

Pero tampoco podemos afirmar que arrya_shitf retorne siempre el elemento quitado como string.

Qué sucede si hacemos esto?:
Código PHP:
Ver original
  1. <?php
  2. $stack = array( array("ALBARICOQUE"), "NARANJA", "plátano", "manzana", "frambuesa");
  3. ?>

En este segundo ejemplo podemos ver que array_shift retorna un array en lugar de un string, así que lo mas sensato va a se adaptarse a lo que dice el manual sin mas:

Cita:
array_shift
Devuelve el valor quitado, o NULL si el array está vacío o no es un array.
Cita:
Iniciado por Rodrhigo Ver Mensaje
... array_shift efectivamente retorna el elemento quitado($mixed / lo que sea) y no un array --> var_dump($fruit);
Efectivamente Rodrhigo lo has explicado perfectamente.

Igualmente agradecer a ambos que me sacaran de ese error. Un saludo.
__________________
Unset($vida['malRollo']);
  #8 (permalink)  
Antiguo 24/12/2016, 12:50
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: De operador Ternario a operador fusión de null

Igual no me compensa pasarlo a "operador fusión de null" aunque igual con un implode() seria posible, visto que decís que array_shift() devuelve un array de un elemento

Etiquetas: null, operador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.