ここで、直積みコードを動かす為には 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の場合は「値渡し」でガッツリ保護されているから、
『再代入禁止』『参照透過』何それ美味しいの?でも確かにそれなりに問題ないはず。
【PHP】下らねぇ質問はここに書き込みやがれ 12
■ このスレッドは過去ログ倉庫に格納されています
736PHPerは糞 (ワッチョイ c17b-NIVl)
2021/08/11(水) 21:04:54.72ID:C/NScrzP0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- サナエノミクスについて力説 積極的な財政出動で「所得増える 消費マインド上がる 税収増える」片山さつき財務大臣 ★3 [少考さん★]
- 中国軍機のレーダー照射1週間 駆け引き続く 中国、米のレッドライン模索 日本、米以外の同志国とも連携探る 米は対立から距離置く★2 [ぐれ★]
- 鈴木農相「おこめ券はお米しか買えないわけではない。例えば卵、味噌、しょうゆ、こうした購入に利用可能」 ★4 [Hitzeschleier★]
- 山里亮太、フィリピンに子ども食堂を建設 「偽善者」「日本の子どもを助けるべき」の声があっても活動を続ける理由 [Anonymous★]
- 【芸能】粗品、日本テレビに苦言 客のレベルが「かなり低い。あいつら分かってない」「拍手したいだけやねん」 [冬月記者★]
- 橋下徹氏「総理なら岡田さんに何を聴かれても耐えてほしかった」 高市首相の台湾有事めぐる答弁に# [jinjin★]
- この時期にJKじゃないのにミニスカ奴ってメンヘラ率何%??
- フランダースの犬を見たんだが
- いや、まじで割とまじで頭おかしい
- この女がいいねと君が言ったから12月24日はレイプ記念日
- 思考盗聴されてる
- ドラゴンボールのピラフ様って性欲あるの?
