2012-08-07 10 views
8

Estoy seguro de que leí hace tiempo acerca de una nueva característica de PHP que era un nuevo método mágico o una nueva interfaz para que pudiera implementar métodos Arrayable.Interfaz PHP configurable

por ejemplo

interface Arrayable 
{ 
    public function toArray(); 
} 

¿Estaba imaginando?

+0

No es 5.4, y tal vez no sea exactamente lo que quieres decir, ¿pero fue esto? http://php.net/manual/en/class.arrayaccess.php – Nanne

+2

Si fueran a agregar esa característica (y estoy de acuerdo en que sería bueno ...), estoy seguro de que lo agregarían como una magia método, como __toArray(). No parece haber ninguno de esos :(. – Corbin

+0

ArrayAccess se utiliza para hacer que un objeto se comporte como una matriz. ToArray() devolvería una representación del objeto como una matriz. – gawpertron

Respuesta

1

Probablemente esté pensando en la interfaz iterator. Si crea una clase que implementa esto, puede iterar sobre ella como si fuera una matriz. Por ejemplo, puede usarlo en un bucle foreach().

También eche un vistazo a la otra predefined interfaces.

Siempre puede escribir su propia interfaz de arrays y luego puede escribir la sugerencia o verificarlo con instanceof (vea el ejemplo n. ° 4) como indicó que quería hacer en su comment.

+0

http : //www.php.net/manual/en/class.serializable.php tiene la misma idea que la interfaz Arrayable. No se trata de hacer un objeto atravesable, sino de poder devolver una representación del objeto como una matriz. – gawpertron

+0

O escriba casting en una matriz, es decir '$ foo = (array) $ arrayableObject' – gawpertron

+0

Luego, simplemente escriba un método toArray(). Está en la mejor posición para saber cómo debe representarse su objeto como una matriz. No creo que se pueda esperar que PHP lo adivine por ti. – vascowhite

10

No es en sí mismo PHP, pero laravel tiene una interfaz que está destinado para ese propósito exacto:

<?php namespace Illuminate\Contracts\Support; 

interface Arrayable { 

    /** 
    * Get the instance as an array. 
    * 
    * @return array 
    */ 
    public function toArray(); 

} 

Nota: En laravel v4 era el espacio de nombres Illuminate\Support\Contracts y el nombre de la interfaz era ArrayableInterface.

+0

Estaba pensando en una interfaz nativa que podría encasillar objetos en una matriz, es decir '$ array = (array) $ object;' – gawpertron

+0

namespace Illuminate \ Contracts \ Support; – ademin

Cuestiones relacionadas