Maj*_*jql 34 php arrays casting object
我有一个类Foo的对象:
class Foo extends Bar {
protected $a;
protected $b;
}
$obj = new Foo();
Run Code Online (Sandbox Code Playgroud)
我想要(并且有)做的是将此对象转换为数组,如下所示:
$arr = (array)$obj;
Run Code Online (Sandbox Code Playgroud)
是否有任何魔法(或不是魔法:))方法此时被调用?或者有没有其他方法来拦截它?我知道我可以写一个简单的方法,例如.asArray()在Foo,但我正在寻找一些更"原生"的PHP方式.
tac*_*one 43
__toArrayPHP中没有神奇的方法.2006年拒绝了一项改进提案,其答案如下:
[2006-08-20 11:12 UTC] helly@php.net
为什么不简单地使用方法asArray()甚至可以作为接口的par:
interface ArrayConversion {function asArray(); }
看,我们有__toString,因为它支持语言结构,如echo,print和其他内部函数.但是我们已经决定反对数组的自动转换.因此,任何语言结构都不会支持它.也就是说没有必要这样做,没有什么可以赢得上述界面.事实上,你会让它变得更复杂,因为你只需添加一个魔术功能.
因此,它不太可能在未来的任何版本中实施(如果你问我,这很可惜).
Exp*_*lls 33
您可以让类实现ArrayAccess接口.这将允许您像对象一样处理对象而不进行强制转换,您可以完全控制成员的使用方式.
Bor*_*éry 14
遗憾的是,转换为数组不会触发任何魔术方法,就像它完成:
$s = (string)$obj;
Run Code Online (Sandbox Code Playgroud)
触发__toString()方法,你可以覆盖.
但是,您可以编写自定义toArray()方法.
您可能还对Serializable可以编写自定义序列化策略的界面感兴趣.
| 归档时间: |
|
| 查看次数: |
26209 次 |
| 最近记录: |