我正在浏览SO并发现这个托管代码是一种减少PHP代码的推荐方法。
https://github.com/jamierumbelow/codeigniter-base-model
到目前为止,从我弄清楚如何使用的方法来看,我喜欢它的功能以及制作它的简单程度。
但是,在以下代码中:
/**
* Get a single record by creating a WHERE clause by passing
* through a CI AR where() call
*
* @param string $key The key to search by
* @param string $val The value of that key
* @return object
*/
public function get_by() {
$where =& func_get_args();
$this->_set_where($where);
$this->_run_before_get();
$row = $this->db->get($this->_table)
->row();
$this->_run_after_get($row);
return $row;
}
我不确定如何调用此函数。 对它的作用的描述正是我想要做的。
@params表示它接受了WHERE块的键和值对,但我在方法签名中没有看到任何函数输入。
请帮帮忙?
答案 0 :(得分:2)
正如我注意到很多CI代码,它很奇怪而且维护不友好。
PHP函数可以接受 n 或更多参数(其中 n 是签名中定义的参数数量)
代码使用func_get_args()
返回一个参数数组。
然后将参数数组传递给_set_where()
方法,该方法将一个或两个项传递给db->where()
方法。
更具描述性的方法签名
public function get_by($key, $val = null)
答案 1 :(得分:2)
为了将来的参考,和Phil提到的一样,*_by
方法将值传递给db->where
方法。这意味着您可以使用各种方法:
$row = $this->model->get_by('key', $value);
或者将数组用于多个WHERE条件:
$row = $this->model->get_by(array('key' => $value, 'other_key !=' => $value));
或者只是字符串(不要忘记逃避你的价值观!):
$row = $this->model->get_by('some_column = ' . $this->db->escape($value));
自从提出这个问题以来,我thoroughly updated the documentation所以现在它应该更加清晰了。希望这会有所帮助。