PHP Arrayable Interface
Solution 1
Was I imagining it?
Yes.
There is no interface (PHP 5.4 or otherwise) within PHP for handling casting to an array.
PHP 5.4.0 introduced the
JsonSerializable
interface, perhaps you're thinking of that?There's also a draft RFC (one of several related) that suggests a
__toArray()
method; see Request for Comments: Scalar Type Casting Magic Methods
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.
gawpertron
Web Developer http://www.linkedin.com/in/adamholdbrook
Updated on July 09, 2022Comments
-
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 over 11 yearsphp.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 over 11 yearsOr type casting to an array ie
$foo = (array) $arrayableObject
-
vascowhite over 11 yearsThen 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 over 11 yearsI plan to, but to check if the object is an
interfaceof
of a standard interface would be tidy. -
gawpertron about 10 yearsI was kind of thinking of a native interface that you could then typecast objects to an array i.e.
$array = (array) $object;
-
alexeydemin over 7 yearsnamespace Illuminate\Contracts\Support;
-
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/…