読者です 読者をやめる 読者になる 読者になる

ポンコツWebエンジニアのかっこ悪く生きる日記

頭の中にあるうちは何だって傑作

2016年11月25日 ミュータブルな foreach

3行まとめ

  • で括ると詳細を表示できる。更にマークダウンを上手く使って Github 上で表現できるようになるぞ。
  • 今まで背を向けてきた$GLOBALSと向き合うことにした。$GLOBALSを撲滅するためには$GLOBALSを知らなければいけないのだ。
  • 変数の初期化
    • 将来的に誰かがコードを書いたときに、自分が書いた処理に影響してしまうことがある。それを防ぐために、初期化が必要となる。
    • 関数定義の冒頭に書くか、初期化対象となる処理のすぐ前に書く
    • JSはどちらかというと前者の傾向が強い

php.net 先生

PHP では変数を初期化する必要はありませんが、そのようにするのはとてもよいことです。 初期化されていない変数の値は、状況に応じたその型のデフォルト値 - boolean なら FALSE、integer や float ならゼロ、 文字列 (echo で使う場合など) なら空の文字列、配列なら空の配列となります。 初期化されていない変数のデフォルト値に依存すると、そのファイルを include している別のファイルで同名の変数が使用されていた場合などに 問題を起こします。また、register_globals が on の場合には重大なセキュリティリスク を抱えることになります。初期化されていない変数を使用すると、 E_NOTICE レベルのエラーが発生します。 しかし、初期化されていない配列に要素を追加する場合はエラーにはなりません。 変数が初期化されているかどうかの判断には、isset() を使用します。

  • エルビス演算子の事例を覚えた。適材適所で使うとエレガントぽい。
  • 破壊的なメソッドとforeachの挙動をごっちゃにして勘違いしていた。
    • 配列を扱う処理を書くときに複雑になってきて分からなくなってきたら、もう扱っている配列全てを print_r 等で書き出すと理解できる。
  • 参照渡しは値を代入したあと違う番地にデータを作る。そしてシンボリックリンクのように元々のデータが参照渡しされるため結果的に破壊的な処理となり上書き処理が実現できる。
  • free() という関数の定義元が追えなかった。
    • Pear ライブラリが用意している DB_result::free() のことだった。サービス内のコードを見ても見当たらないのはこのためであった。
    • PHP で用意されているものでもなく、サービスコード内で定義されたものでない場合はライブラリで定義されているものの可能性が高い。という知見を得た

フリースペース

問題解決素早く行うマンになると気持ちが高ぶり集中力も上がってどんどん正のスパイラルを作り出せるので、問題解決素早く行うマンに俺はなる。と毎日朝会社に来たら心の中で呟くようにする。

まずは体調を崩しているので早く解決しよう。