Возвращаемый тип библиотечной функции exec_SELECTcountRows - PullRequest
1 голос
/ 22 августа 2011

В базе данных Typo3 DB есть метод с именем exec_SELECTcountRows.Реализация выглядит следующим образом:

/**
 * Counts the number of rows in a table.
 *
 * @param   string      $field: Name of the field to use in the 
                        COUNT() expression (e.g. '*')
 * @param   string      $table: Name of the table to count rows for
 * @param   string      $where: (optional) WHERE statement of the query
 * @return  mixed       Number of rows counter (integer) or 
                        false if something went wrong (boolean)
 */

public function exec_SELECTcountRows($field, $table, $where = '') {
    $count = FALSE;
    $resultSet = $this->exec_SELECTquery('COUNT(' . $field . ')', $table, $where);
    if ($resultSet !== FALSE) {
        list($count) = $this->sql_fetch_row($resultSet);
        $this->sql_free_result($resultSet);
    }
    return $count;
}

Вопрос:

Является ли тип возвращаемого значения exec_SELECTcountRows действительно целым числом или скорее строкой, содержащей его?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

На самом деле ты прав.PHPdoc отличается от поведения (так как функции mysql возвращают значение в виде строки).

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

1 голос
/ 22 августа 2011

PHP свободно набран, строка - это целое число, и наоборот. Это зависит от контекста. Я действительно думаю, что возвращаемый тип функции будет меняться в зависимости от запроса и контекста.

Например, функция может возвращать FALSE, что является логическим значением.

Пока существует реальный результат для базы данных, столбцы на основе count(*) обычно возвращаются как строки, а не как целые числа (с MySQL Functions ). Таким образом, в этом случае тип возвращаемого значения на самом деле является строкой, а не целым числом. Но поскольку PHP свободно набран, это не имеет большого значения.

Запомните пробел:

Эта функция может возвращать строку или FALSE. Если вы пишете модульный тест, вы должны также проверить тип и отличаться здесь.

Функция имеет смешанный тип возвращаемого значения, который уже задокументирован, поэтому сначала подтвердите, возвращает ли он ЛОЖЬ или нет.

Тогда, если не возвращается false, присвойте (int) значение возвращаемого значения, если вам нужно получить числовое целочисленное значение из строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...