Codeigniter: не уверен, как делать вызовы к этому фрагменту кода - PullRequest
0 голосов
/ 06 октября 2011

Я просматривал 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 ]

2 голосов
/ 27 июня 2012

Для дальнейшего использования и, как упоминал Фил, методы *_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));

Поскольку этот вопрос был задан, я полностью обновил документацию , так что теперь все должно быть немного яснее.Надеюсь, это поможет.

2 голосов
/ 06 октября 2011

Как я заметил, с большим количеством кода CI, это странно и неудобно для обслуживания.

Функции PHP могут принимать n или более аргументов (где n - количество аргументов, определенных в сигнатуре)

В коде используется func_get_args(), который возвращает массив аргументов.

Массив аргументов затем передается методу _set_where(), который передает один или два элемента методу db->where().

Более описательный метод подписи был бы

public function get_by($key, $val = null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...