Cita:  
					Iniciado por xerifandtomas  
  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- <?php 
- $stack = array("naranja", "plátano", "manzana", "frambuesa"); 
- ?> 
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- $ejemplo = strtolower(null);//devuelve empty => "" 
- echo $ejemplo ?? 'No Imprimo este valor, porque la variable $ejemplo NO es NULL, es Empty';