Codeigniter:不确定如何调用这段代码

时间:2011-10-06 01:37:26

标签: php sql codeigniter inheritance

我正在浏览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块的键和值对,但我在方法签名中没有看到任何函数输入。

请帮帮忙?

2 个答案:

答案 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所以现在它应该更加清晰了。希望这会有所帮助。