PHPは変数の型のチェックがいい加減なんで、仕様をよく理解していないと変なところでハマったりします。
CakePHPのコントローラー処理で、仮に
<?php //コントローラーで public function view($user_id = null){ if($user_id === 1){ //ユーザーID1の処理 } }
とした場合、これは意図しない動作になります。
user_id=1のつもりで http://ドメイン名/users/view/1 にアクセスしても、if文の中に入りません。
なぜでしょうか?
実は、アクションの引数としてはいる変数は”文字列型”できます。
文字列の”1″ と 数字の1 は違うものになるので、型も含めて比較する===は、例のプログラムはif文の中に入らず、意図した動作にはなりません。
検索パラメータとしてmodelに渡す場合は、文字列だろうが数字だろうがあまり関係はありません(最終的にはSQL文になるので全部テキスト扱いになっちゃう)ので問題にはなりにくいですが、プログラム上で直接比較演算をするなどの場合は、この点を考慮しないとトラブルの素になります。
型を厳密に考慮しない==で書くという方法もありますが、できればちゃんと入力チェックをして、intval()などで型変換をしたほうが良いでしょう。
ちなみに引数に型をつけて
public function view(int $user_id = null)
としても、nullが入ってきてしまって取得できなくなってしまいます。