【问题标题】:Is there a valid technical use for returning by reference in PHP5在 PHP5 中通过引用返回是否有有效的技术用途
【发布时间】:2012-07-03 16:07:09
【问题描述】:

我的问题是对以下问题的跟进: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 中使用这种技术的任何正当理由吗?

【问题讨论】:

    标签: php oop php-5.3


    【解决方案1】:

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

    我为每个模型都有一个“工厂”类,例如 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
    }
    

    通过引用返回是完成此任务的好方法,无需对我的数据库进行两次调用。

    【讨论】:

    • 它不会通过引用返回吗?我错过了一些东西
    • 除非在函数定义中明确使用 & ,否则不能通过引用返回值。你可以在 PHP4 中但在 PHP5 中不行
    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多