PHP Arrayable Interface

24,533

Solution 1

Was I imagining it?

Yes.

Solution 2

It's not in PHP itself, but Laravel has an interface that is intended for that exact purpose:

<?php namespace Illuminate\Contracts\Support;

interface Arrayable {

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

}

Note: In Laravel v4 the namespace was Illuminate\Support\Contracts and the interface name was ArrayableInterface.

Solution 3

You are probably thinking of the iterator interface. If you create a class that implements this you can iterate over it as if it is an array. For example, you can use it in a foreach() loop.

Also take a look at the other predefined interfaces.

You can always write your own arrayable interface and then you can type hint for it or check it with instanceof (see example #4) as you indicated you wanted to do in your comment.

Solution 4

There's this (which is fairly useless IMO) http://php.net/manual/en/class.traversable.php

and also this (which does come in handy but always requires a type check before using it)

http://php.net/manual/en/function.iterator-to-array.php

But no way to handle object to array conversion implicitly.

Share:
24,533
gawpertron
Author by

gawpertron

Web Developer http://www.linkedin.com/in/adamholdbrook

Updated on July 09, 2022

Comments

  • gawpertron
    gawpertron almost 2 years

    I'm sure I read a while back about a new feature of PHP that was either a new magic method or a new interface so that you could implement Arrayable methods.

    eg

    interface Arrayable
    {
        public function toArray();
    }
    

    Was I imagining it?

  • gawpertron
    gawpertron over 11 years
    php.net/manual/en/class.serializable.php has the same idea as the Arrayable interface. It's not about making an object traversable, but being able to return a representation of the object as an Array.
  • gawpertron
    gawpertron over 11 years
    Or type casting to an array ie $foo = (array) $arrayableObject
  • vascowhite
    vascowhite over 11 years
    Then just write a toArray() method. You are best placed to know how your object should be represented as an array. I don't think PHP could be expected to guess that for you.
  • gawpertron
    gawpertron over 11 years
    I plan to, but to check if the object is an interfaceof of a standard interface would be tidy.
  • gawpertron
    gawpertron about 10 years
    I was kind of thinking of a native interface that you could then typecast objects to an array i.e. $array = (array) $object;
  • alexeydemin
    alexeydemin over 7 years
    namespace Illuminate\Contracts\Support;
  • jave.web
    jave.web almost 5 years
    @gawpertron btw you can do that, it will result in array of property values keyed by property names - you can then access public properties, private&protected are prefixed in this conversion - more on that here in official docs: php.net/manual/en/…