Saltar al contenido

¿Cómo hacer una clase anidada de PHP o métodos anidados?

Te recomendamos que pruebes esta resolución en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

Haga que los métodos devuelvan objetos con los métodos descritos y obtendrá lo que busca.

Así que mientras $DB es un objeto que tiene un comments()-método, esa parte es válida. Si eso comments() devuelve un objeto que tiene un id()-método, esa parte también es válida. Después, id() necesita devolver un objeto que tenga el limit()-método.

En su caso particular, es posible que desee hacer algo como esto:

class DB 
  public function comments() 
    // do preparations that make the object select the "comments"-table...
    return $this;
  

  public function id($string) 
    // handle this too...
    return $this;
  

  public function limit($int) 
    // also this
    return $this;
  

  public function execute() 
    $success = try_to_execute_accumulated_db_commands();
    return $success;
  


$DB = new DB();
$DB->comments()->id(" > 3")->limit(10);

En mi ejemplo, cada método (que tampoco se muestra aquí) devolvería el objeto en sí, para que los comandos se puedan encadenar. Cuando finaliza la construcción de la consulta de la base de datos, en realidad evalúa la consulta invocando execute() eso (en mi caso) devolvería un booleano que representaría el éxito de la ejecución de la base de datos.

El usuario nickohm sugirió que esto se llama interfaz fluida. Debo admitir que este es un término nuevo para mí, pero eso dice probablemente más de mi conocimiento que el uso del término. (“Solo escribo código, ya sabes…”)

Nota:$this es una variable ‘mágica’ que apunta al objeto actualmente activo. Como sugiere el nombre, simplemente se devuelve a sí mismo como el valor de retorno del método.

La convención estándar para esto es devolver la instancia de $this al final de cada llamada al método. Entonces, cuando se devuelve a la persona que llama, solo estamos haciendo referencia a otra llamada de método.

class Foo

  public function do_something()
   
    return $this; 
  

 public function do_something_else() 
 
   return $this; 
  


$foo = new Foo();
$foo->do_something()->do_something_else();

Eres capaz de añadir valor a nuestra información asistiendo con tu experiencia en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *