PHP返回对其他类中的数组的引用

时间:2016-03-01 16:01:53

标签: php arrays

我有一个包含以下内容的类:

class TestClass {
    protected $items = [];

    public function toArray(){
        return $this->items;
    }

    // Items gets set using set(array $items){}
}

在另一个课程中我称之为:

$tmpList = $list->toArray();

现在,如果我没有弄错,这将创建一个全新的独立数组,因此如果TestClass中的数组有100k项,则调用toArray()将创建另一个数组,其中包含两个数组的另外100k项总计20万件。

我有没有办法只返回对TestClass中项目的引用,所以我有一个包含100k项目的数组,而$tmpList只引用这些项目?

如果我这样做来对数组进行排序,那么数组就不会改变

$tmpList = $list->toArray();
usort($tmpList, function($a, $b) use ($orderBy, $direction){
    if($direction == 'desc'){
        return $b->$orderBy > $a->$orderBy;
    }elseif($direction == 'asc'){
        return $b->$orderBy < $a->$orderBy;
    }
});

如果我追加它:

$list->set($tmpList);

数组被排序。

2 个答案:

答案 0 :(得分:3)

不,它不会复制整个数组的内容。数组中的项目将通过引用处理。 PHP将在幕后优化这一点。 PHP不是C.它没有与C相同的意义上的引用(指向内存位置的指针)。您无需担心优化此问题。

答案 1 :(得分:2)

$tmpList = &$list->toArray();

即使你应该测试真正的性能影响,因为使用引用时PHP会出乎意料。

更新:Actualy似乎你还需要添加&amp;面前的功能宣言。这部分错了。

public function &toArray(){ ... }