PHP如何使用自定义功能将对象转换为数组:(array)$ object

时间:2019-05-17 08:39:53

标签: php arrays object casting

我需要这样的东西:

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函数。

1 个答案:

答案 0 :(得分:2)

PHP不像__toArray()那样具有__toString()的本地实现。

如果您查看converting to string的PHP文档,您会发现__toString()魔术方法已被明确提及,以替代默认实现。

但是,关于type casting for arrays的文档清楚地说明了将对象转换为数组而未提及任何魔术方法(强调我的方法)会发生什么情况

  

转换为数组

     

对于整数,浮点数,字符串,布尔值和资源中的任何类型,将值转换为数组将导致数组中的单个元素的索引为零,并且标量的值已转换。换句话说,(array)$ scalarValue与array($ scalarValue)完全相同。

     

如果将对象转换为数组,则结果是一个数组,其元素是对象的属性 .....

     

....

解决方案

简单的解决方案是在您的类中实现->toArray()方法-许多流行的集合实现(包括Laravel的Collection)都可以做到这一点

另一种可行的解决方案是让您的类扩展ArrayObject类,该类允许对象作为数组工作。