16

我确信我不久前读到了 PHP 的一个新特性,它要么是一种新的魔法方法,要么是一种新的接口,以便您可以实现 Arrayable 方法。

例如

interface Arrayable
{
    public function toArray();
}

是我想象的吗?

4

4 回答 4

23

它不在 PHP 本身中,但 Laravel 有一个专门用于此目的的接口:

<?php namespace Illuminate\Contracts\Support;

interface Arrayable {

    /**
     * Get the instance as an array.
     *
     * @return array
     */
     public function toArray();

}

注意:在 Laravel v4 中,命名空间是Illuminate\Support\Contracts,接口名称是ArrayableInterface.

于 2014-03-20T14:28:33.437 回答
15

是我想象的吗?

是的。

于 2012-08-07T08:26:19.570 回答
2

您可能正在考虑迭代器接口。如果您创建一个实现它的类,您可以像它是一个数组一样对其进行迭代。例如,您可以在 foreach() 循环中使用它。

另请查看其他预定义接口

您始终可以编写自己的可数组接口,然后您可以输入提示或使用instanceof进行检查(参见示例 #4),正如您在评论中指出的那样。

于 2012-08-07T08:08:14.707 回答
2

有这个(这是相当无用的IMO) http://php.net/manual/en/class.traversable.php

还有这个(它确实派上用场,但在使用之前总是需要进行类型检查)

http://php.net/manual/en/function.iterator-to-array.php

但是没有办法隐式地处理对象到数组的转换。

于 2012-11-23T14:28:33.650 回答