0

私の質問は、次の質問へのフォローアップです:アンパサンドで php 関数を開始することはどういう意味ですか?

質問で使用されるコード例は次のとおりです。

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) があるのに、なぜ参照が必要なのですか?

選択された回答は、参照を返すことに関する PHP マニュアルから以下を引用しています

参照による戻りは、関数を使用して、参照をバインドする必要がある変数を見つけたい場合に便利です。パフォーマンスを向上させるために参照渡しを使用しないでください。エンジンはこれを自動的に最適化します。正当な技術的理由がある場合にのみ、参照を返します。

2 番目の回答は、PHP4 でこの手法が必要だった理由を示しています。しかし、なぜPHP5でそれが必要なのかについての答えは非常に説得力がありません。

PHP5でこの手法を使用する正当な理由を知っている人はいますか?

4

1 に答える 1

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
}

参照によって戻ることは、データベースを 2 回呼び出すことなくこれを達成するための良い方法です。

于 2012-07-03T16:12:32.200 に答える