PHPとCakePHPを触っていて
気づいたこと
2019/06/18
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
萩原圭市
自己紹介
自己紹介
・萩原圭市(Keiichi Hagiwara)
・GVA TECH株式会社というリーガルテックスタートアップで
Webエンジニアとして働いています。
・サーバーサイドはPHP7.2(CakePHP3.6)
PHPのよさ
型を自動的に変換してくれる
ということは
型を意識しなくても良い
つまり
初心者にとっつきやすい言語 \(^o^)/
本当にそうだろうか?
PHPの型宣言は
弱い型検査と暗黙の型変換
が行われる
むしろ型変換を正しく意識してないと
思わぬ落とし穴にはまりそう
ちなみに厳密な型検査を行いたいなら
PHP7から新機能の
declare(strict_types=1)
を使うと良い
小休憩
CakePHPとは
「設定より規約」
ところでコントローラーの
構成ってどうしてますか?
開発初期
Controller直下に
必要コントローラーファイルを
直置き
開発を進めていくと一つ問題が
…
あるコントローラーから
別のコントローラーのurlを
取得したいとき
ルーティングのメソッドとして
Router::url($url = null, $full = false)
を使います
例えば
Controller直下のファイルから
Controller直下のファイルファイルの
メソッドのurlを取得
できる
Controller直下のファイルから
Controller/Ajaxのファイルファイルの
メソッドのurlを取得
できる
Controller/Ajaxというフォルダの
ファイルから
Controller直下のファイルの
メソッドのurlを取得
できない
※CakePHP3.6でためしてます
階層が下のメソッドかつ
Controller直下ファイルには
到達できなさそう
※気になる方はCakePHP3.6の
vendor/cakephp/cakephp/src/Routing/R
outer.php
の挙動を確かめてみてください
解決策
Controllerの直下には
ファイルを直接置かず、
ディレクトリに分類することで
どこのファイルのメソッドでも
参照できるようになりました
まとめ
まとめ
・PHPは型を自動的に変換してくれる
・一方でその挙動を正しく理解していないと思わぬ挙動にはまるかも
・厳密な型変換を行うならdeclare(strict_types=1)
・CakePHPは「設定より規約」で独自のルールがある
・Controller直下にファイル直置きにしているとRouter::url()でコケる
ありがとうございました

あるあるLT〜サーバーサイドエンジニア〜 Vol.3

Editor's Notes

  • #4 リーガルスタートアップを修正 文字をもっと大きくする 文字がはみ出しているのを修正する
  • #22 ・長い目で見ると時間を節約していることになります ・規約に従うと自由に使える機能が増える ・設定ファイルを調べまわってメンテナンスするという悪夢からも 開放される
  • #28 Controller method prefix