在PHP5中是否有通过引用返回的有效技术用法

时间:2012-07-03 16:07:09

标签: php oop php-5.3

我的问题是对以下问题的跟进:What does it mean to start a php function with an ampersand?

问题中使用的示例代码是:

class FacebookRestClient {
...
    public function &users_hasAppPermission($ext_perm, $uid=null) {
        return $this->call_method('facebook.users.hasAppPermission', 
        array('ext_perm' => $ext_perm, 'uid' => $uid));
    }
...
}

为什么在我们已经有一个引用($ this)时需要引用?

chosen answer引用PHP manual on Returning References

中的以下内容
  

如果要使用函数来查找引用应绑定到哪个变量,则按引用返回很有用。不要使用按引用返回来提高性能。引擎将自动对其进行自动优化。只有在有正当技术理由的情况下才能返回引用。

second answer给出了PHP4中需要这种技术的原因。但我没有找到PHP5中为什么需要它的答案非常有说服力。

有人知道在PHP5中使用这种技术的任何有效理由吗?

1 个答案:

答案 0 :(得分:2)

是的,这是我的代码库中的一个例子。

我为每个模型都有一个“工厂”类,例如UserFactory。当我调用UserFactory :: findOne()时,我返回对模型的引用,该引用存储在UserFactory的数组中。

我这样做,以便如果我获得用户模型并修改其中的内容,然后在我的代码中再次获取它,即使我从未返回数据库,也会使用新信息进行更新。

例如:

<?php
$user = UserModel::findOne([ '_id' => 151 ]);
$user->status = 'disabled';

// Much later
$user = UserModel::findOne([ '_id' => 151 ]);
if ( $user->status != 'disabled' ) {
    // Do stuff
}

通过引用返回是一种很好的方法,可以在不对我的数据库进行两次调用的情况下完成此操作。