我有一个包含以下内容的类:
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);
数组被排序。
答案 0 :(得分:3)
不,它不会复制整个数组的内容。数组中的项目将通过引用处理。 PHP将在幕后优化这一点。 PHP不是C.它没有与C相同的意义上的引用(指向内存位置的指针)。您无需担心优化此问题。
答案 1 :(得分:2)
$tmpList = &$list->toArray();
即使你应该测试真正的性能影响,因为使用引用时PHP会出乎意料。
更新:Actualy似乎你还需要添加&amp;面前的功能宣言。这部分错了。
public function &toArray(){ ... }