我需要这样的东西:
class MyClass {
$a = 'A';
$b = 'B';
public function __to_array(){
$r = (array) $this;
$r['ab'] = 'AB';
return $r;
}
};
$x = new MyClass();
$x_as_array = (array) $x;
在最后一行中,我不需要返回['a'=>'A','b'=>'B'],但我需要将此默认转换强制写入我的自定义__to_array函数。
答案 0 :(得分:2)
PHP不像__toArray()
那样具有__toString()
的本地实现。
如果您查看converting to string的PHP文档,您会发现__toString()
魔术方法已被明确提及,以替代默认实现。
但是,关于type casting for arrays的文档清楚地说明了将对象转换为数组而未提及任何魔术方法(强调我的方法)会发生什么情况
转换为数组
对于整数,浮点数,字符串,布尔值和资源中的任何类型,将值转换为数组将导致数组中的单个元素的索引为零,并且标量的值已转换。换句话说,(array)$ scalarValue与array($ scalarValue)完全相同。
如果将对象转换为数组,则结果是一个数组,其元素是对象的属性 .....
....
简单的解决方案是在您的类中实现->toArray()
方法-许多流行的集合实现(包括Laravel的Collection
)都可以做到这一点
另一种可行的解决方案是让您的类扩展ArrayObject
类,该类允许对象作为数组工作。