Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Casting object to array - any magic method being called?

I have an object of class Foo:

class Foo extends Bar {     protected $a;     protected $b; }  $obj = new Foo(); 

What I want (and have) to do is cast this object to an array, like this:

$arr = (array)$obj; 

Is there any magic (or not magic :)) method that is being called at this moment? Or is there any other way to intercept it? I know I can write a simple method, eg. asArray() in Foo, but I'm looking for some more "native" PHP ways.

like image 426
Majql Avatar asked Jun 20 '12 14:06

Majql


People also ask

Which magic method is called when object of class is unset?

public __unset ( string $name ) : void. __unset() is invoked when unset() is used on inaccessible (protected or private) or non-existing properties. Malhar Lathkar.

What is the purpose of the magic method?

Magic methods in Python are the special methods that start and end with the double underscores. They are also called dunder methods. Magic methods are not meant to be invoked directly by you, but the invocation happens internally from the class on a certain action.


1 Answers

No

There is no __toArray magic method in PHP. An enhancement proposal has been rejected in 2006 with the following answer:

[2006-08-20 11:12 UTC] [email protected]

Why not simply have a method asArray() maybe even as par of an interface:

interface ArrayConversion { function asArray(); }

See, we have __toString as it is supported in language constructs like echo, print and other internal functions. But we decided against an autoconversion for arrays already. So itwill never be supported in any language construct. That said there is no needed for this and nothing you would win against the above interface. In fact you would make it php more complex because you'd add just one more magic feature.

It is thus very unlikely that it will be implemented in any future release (which is a pity, if you ask me).

like image 113
tacone Avatar answered Oct 08 '22 04:10

tacone