PHP (>= 5.0) では、参照渡しの方が速いのでしょうか?
2023-12-20 14:02:52
質問
PHPでは、関数のパラメータは、関数宣言でパラメータの前にアンパサンドを付けることで、以下のように参照渡しとすることができます。
function foo(&$bar)
{
// ...
}
さて、私が認識しているのは、これが ではなく パフォーマンスを向上させるために設計されたものではなく、通常はスコープ外の変数を関数で変更できるようにするためのものであることを理解しています。
代わりに、PHPはCopy On Writeを使用して、変更されるまでオブジェクト(そして多分配列も)をコピーしないようにしているようです。そのため、パラメータを変更しない関数では、参照渡しした場合と同じ効果が得られるはずです。
しかし、私は、Copy On Write ロジックが参照渡しで短絡的に実行され、それがパフォーマンスに影響を与えるかどうか疑問に思っていました。
ETA: 念のため、私はそれが高速化されていないと仮定し、これが参照のためではないことをよく知っています。私は、ボンネットの下で何が確実に起こっているかを本当に知っている人からの答えを探しているのです。5年間のPHP開発において、ソースを読むだけではPHPの内部に関する質の高い情報を得るのは難しいと感じています。
どのように解決するのですか?
Zend Engine は copy-on-write を使用しており、 自分で参照を使用すると、少し余分なオーバーヘッドが発生します。唯一見つけることができるのは この言及 のコメントしか見つかりませんが マニュアル のコメントには他のリンクが含まれています。
(EDIT) マニュアルのページで オブジェクトとリファレンス には、オブジェクト変数とリファレンスがどのように異なるかについて、もう少し情報があります。
関連
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] <は<=より速いのか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み】In_arrayが動作しない。
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] PHPのforeachが元の配列の値を変更する [重複]。