概要
回避しながら、参照される変数を2レベル上に変更する方法を見つけようとしていますDeprecated: Call-time pass-by-reference has been deprecated
私が行った研究
これとこれに目を通しましたが、警告を黙らせることができるようcall_user_func_array
ですが、何かが足りないと思います。
問題
私は PHP で MongoDB を使用しています。次のメソッドはモデルに属し、参照によって渡された入力のスキーマを保存する前にチェックするだけです。
// $this->collection is the MongoCollection object
public function save(&$entry) {
if( empty($entry) ) return false;
if( !$this->checkSchema($entry) ) $this->throwDbError('Schema violation in `' . get_class($this) . '`');
try { return $this->collection->save(&$entry); } // <---- want to avoid using &
catch (Exception $e) { return $this->throwDbError($e); }
}
MongoCollection::save ($this->collection->save)
_id
フィールドに$entry
新しいドキュメント IDを追加します。ただし、この変更は、参照によって呼び出し時間を渡さない限り$entry
、上記のメソッドに渡されるに反映されていません。(本質的には、 2 レベル上に変更できるようにしたい)MongoCollection::save
$entry
わかりました。これが問題を説明する最善の方法です。説明が必要な場合はお知らせください。