[過去ログ]
【PHP】下らねぇ質問はここに書き込みやがれ 12 (1002レス)
【PHP】下らねぇ質問はここに書き込みやがれ 12 http://mevius.5ch.net/test/read.cgi/tech/1619667579/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
736: PHPerは糞 (ワッチョイ c17b-NIVl) [sage] 2021/08/11(水) 21:04:54.72 ID:C/NScrzP0 ここで、直積みコードを動かす為には format_for_API を「参照渡し」から「値渡し値返し」に変更する必要が有り、 コードは、 $resultArr = fetch_from_DB(); $resultArr = format_for_API($resultArr); // 再代入 echo json_encode($resultArr); となる。これだと結果としては速度/メモリ共に変化無い。ただし最近の『再代入禁止』には反するので、 $resultArr = fetch_from_DB(); $resultArr_formatted = format_for_API($resultArr); // 別名 echo json_encode($resultArr_formatted); と別名にすると、(今回の俺の場合、速度は大して変わらないが)使用メモリは増えてしまう。 これらから言えるのは、 A. format_for_APIは「参照渡し(参照返し)」が正しいはずだが、何故かNoticeが出されてしまう。 仕様としては、参照渡しに未初期化の変数が渡されたらそこでnull初期化される、ということだから、 直積みでも動くのは正しく、Noticeが過剰なように見える。(ただし以下7とは矛盾) (PHPの構造上 is_ref が変数上にしか持てないのが問題なのだろうが、 そこはボックス化みたく変数化すればいいだけで、このような右辺値を流し込んでいる状況なら危険性はないはず。 実際動いているし。だから何でNoticeなの?となる) B. 同名の変数に再代入する場合は(破棄されることが見えているから)最適化がかかり、問題はない。 C. 別名の変数に保存した場合、元の変数($resultArr)がそれ以降使われない場合でも、破棄されず、最適化がかからない。 結果、メモリを余分に消費する。 これについて、冒頭の記事では「そういう特殊な高級言語だ」と表現されているが、これは当たっている。 クダグダ考えずに「値渡し値返し」でひたすら全部組み上げてもそれなりに動くからだ。 そして昨今の『インミュータブル』で『再代入禁止』なのは下位での変更が上位のコードから見えないからであって、 PHPの場合は「値渡し」でガッツリ保護されているから、 『再代入禁止』『参照透過』何それ美味しいの?でも確かにそれなりに問題ないはず。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/736
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 266 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s