将对象转换为数组 - 调用任何神奇的方法?

2022-08-30 11:26:54

我有一个Foo类的对象:

class Foo extends Bar {
    protected $a;
    protected $b;
}

$obj = new Foo();

我想要(并且必须)做的是将此对象转换为数组,如下所示:

$arr = (array)$obj;

此刻是否有任何魔法(或不是魔法:))方法正在被调用?还是有没有其他方法来拦截它?我知道我可以写一个简单的方法,例如。 在Foo中,但我正在寻找一些更“原生”的PHP方法。asArray()


答案 1

PHP中没有神奇的方法。2006,一项增强提案被拒绝,答案如下:__toArray

[2006-08-20 11:12 UTC] helly@php.net

为什么不简单地有一个方法asArray()甚至可以作为接口的par:

interface ArrayConversion { function asArray(); }

看,我们有__toString因为它在echo,print和其他内部功能等语言结构中受支持。但是我们已经决定反对对数组进行自动转换。因此,它永远不会在任何语言结构中得到支持。也就是说,这没有必要,也不会在上述界面上赢得任何东西。事实上,你会让它变得更复杂,因为你只会再添加一个神奇的功能。

因此,它不太可能在任何未来的版本中实现(如果你问我,这很遗憾)。


答案 2

您可以让该类实现 ArrayAccess 接口。这将允许您将对象视为数组而不进行强制转换,并且可以完全控制成员的使用方式。