- 締切済み
メソッドの処理の意味
PHP Version 5.3.1を使用しています。 Zend Frameworkというフレームワークを使用しているのですが、 http://manual.zfdes.com/ja/zend.db.profiler.html http://ideone.com/JekM0d ┬ Zend │└ Db │ ├ Profiler │ │└ Query.php Query.phpというファイルのクラスZend_Db_Profiler_Query内のbindParamsメソッド /** * @param array $param * @return void */ public function bindParams(array $params) { if (array_key_exists(0, $params)) { array_unshift($params, null); unset($params[0]); } foreach ($params as $param => $value) { $this->bindParam($param, $value); } } の if (array_key_exists(0, $params)) { array_unshift($params, null); unset($params[0]); } この部分は具体的に何をしている処理なのでしょうか? 配列内に数値の0があるかを調べて、 存在したらunshiftで先頭にnullを挿入する。 でもunsetでその挿入した行(インデックスが0なので)を削除する。 というふうに自分は解釈しているのですが、もしそれだと array_unshiftでnullの行を挿入する意味が分かりません・・・ そもそもなぜarray_key_existsで0があるかを調べる必要があるのでしょうか? できればこのメソッドの具体的な使用も含めてアドバイス頂けないでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- shimix
- ベストアンサー率54% (865/1590)
>array_unshiftでnullの行を挿入する意味が分かりません・・・ おそらくはnullでも何でもいいです(どうせすぐに削除しますから)。array_unshiftで挿入したら「キーが0から振り直される」ということだけが目的だろうと思います。先頭に(値は何でもいいので)要素を挿入してキーを0,1,2・・・にしておいてから0を削除する。つまり要素の値を変えずにキーだけを1,2,3・・・の順に振り直すことになります。 bindParamなので、プレースホルダが疑問符(?)のときには1からの連番になります。単純に「配列」を渡されたときには0から付番されているのでそれを調整しているだけでしょう。
お礼
ご回答ありがとうございます。 なるほど、仰る意味はなんとなく理解はできるのですが、 つまり $params = array('id' => 1, 'name' => 'tanaka'); $queryObj->bindParams($params); という連想配列と $params = array(1, 'tanaka'); $queryObj->bindParams($params); という配列の渡し方の2種類があって、 下の方の渡し方(配列)の場合に、この処理(if (array_key_exists(0, $params))内)を行うのでしょうか? 仮にそうだとしたら、そもそも例えば $params = array('tanaka',1); このような間違った順序で渡すこと自体おかしいと思いますし、 その処理を行ったとしても順番は入れ替わらなくないと思うのですが・・・ ちょっと自分のこの渡し方のイメージが間違ってる(勘違いしてる)ような気がするので、 もしよろしければshimixさんの分かる範囲で結構ですので 具体的な渡し方の例を提示して頂けないでしょうか?