Bienvenido a la Comunidad de Treehouse

¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.

¿Buscas aprender algo nuevo?

Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de

Inicia tu prueba gratuita

PHP Conceptos Básicos de PHP Orientado a Objetos Construyendo una Colección Objetos de Colección

Tengo problemas con la tarea 3 del Desafío de Colecciones en OOP PhP

Recibo un error que dice que necesito considerar tanto "roof_color" como "wall_color" y verificarlos contra el parámetro $color.

--- Php

}

Las dos tareas anteriores son aceptables, pero no puedo averiguar qué está mal en mi sentencia condicional.

index.php
<?php

// añade código debajo de este comentario

class Subdivision 
{
  público $houses = de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()".();

  público función filterHouseColor($color) 
  {
    $output = de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()".();
    foreach($this->houses como $dwelling) {
      if ($dwelling->roof_color == $color || $dwelling->wall_color == $color) {
        $output = $dwelling;
      }
      return $output;
    }
  }
}
?>

2 Respuestas

Jennifer Nordell
sello-máscara
PERSONAL
.a{fill-rule:evenodd;}techdegree
Jennifer Nordell
Profesor de Treehouse

Hola, Mike Womack ¡Estás haciendo fantástico¡Has entendido el problema sumamente bien. Todo se reduce a la ubicación. Es decir, la ubicación de tu sentencia de return . Estás devolviendo el valor demasiado pronto. return suceda dentro el foreach bucle. Una vez que se return ejecuta, el bucle detiene la ejecución.

En este momento, tu código se ve así:

foreach($this->houses as $dwelling) {  // comenzar foreach
      if ($dwelling->roof_color == $color || $dwelling->wall_color == $color) {  // comenzar if
        $output[] = $dwelling;
      } // fin if
      return $output;
    } // fin foreach

Pero quisiste para hacer esto:

foreach($this->houses as $dwelling) {  // comenzar foreach
      if ($dwelling->roof_color == $color || $dwelling->wall_color == $color) {  // comenzar if
        $output[] = $dwelling;
      } // fin if
    } // fin foreach
    return $output; // devolver después de que el foreach haya terminado

¡Espero que esto te ayude! :sparkles:

¡Fantástico! Muchas gracias Jennifer, estaba tan enfocado en la sentencia condicional como el problema que me perdí la sentencia de retorno.