ライブラリのコードをふらっと読んだとき。こんなコードを見つけた。
- ~/lib/Cake/View/Helper/FormHelper.php
<?php // ~ 省略 ~ // 1050行目ぐらい $out['input'] = $this->_getInput(compact('type', 'fieldName', 'options', 'radioOptions', 'selected', 'dateFormat', 'timeFormat')); $output = ''; foreach ($format as $element) { $output .= $out[$element]; } if (!empty($divOptions['tag'])) { $tag = $divOptions['tag']; unset($divOptions['tag']); $output = $this->Html->tag($tag, $output, $divOptions); } return $output; } /** * Generates an input element * * @param array $args The options for the input element * @return string The generated input element */ protected function _getInput($args) { extract($args); switch ($type) { case 'hidden': return $this->hidden($fieldName, $options); case 'checkbox': return $this->checkbox($fieldName, $options); case 'radio': return $this->radio($fieldName, $radioOptions, $options); case 'file': return $this->file($fieldName, $options); case 'select': $options += array('options' => array(), 'value' => $selected); $list = $options['options']; unset($options['options']); return $this->select($fieldName, $list, $options); case 'time': $options['value'] = $selected; return $this->dateTime($fieldName, null, $timeFormat, $options); case 'date': $options['value'] = $selected; return $this->dateTime($fieldName, $dateFormat, null, $options); case 'datetime': $options['value'] = $selected; return $this->dateTime($fieldName, $dateFormat, $timeFormat, $options); case 'textarea': return $this->textarea($fieldName, $options + array('cols' => '30', 'rows' => '6')); case 'url': return $this->text($fieldName, array('type' => 'url') + $options); default: return $this->{$type}($fieldName, $options); } }
注目したのはこのコード。
<?php $out['input'] = $this->_getInput(compact('type', 'fieldName', 'options', 'radioOptions', 'selected', 'dateFormat', 'timeFormat'));
んで、呼び先は
<?php protected function _getInput($args) { extract($args); switch ($type) { case 'hidden':
ここでは引数は$args
と記述されて、extract()
で変数化している。
複数あるとき、メソッドの引数のカッコの中が長くなりがちだけど、こんな書き方もいいなと思った。