Неправильно ли вводить возвращаемое значение подсказки в функцию, которая должна возвращать true или false? - PullRequest
1 голос
/ 10 декабря 2010

Быстрый вопрос: для тех, кто не знает, CakePHP Model-> count ();всегда возвращает целое число.

Если у меня есть функция для проверки, если таблица пуста (возвращает true или false), было бы плохой идеей сделать это:

public function isEmpty() {
    return (boolean) $this->find('count');
}

В противоположностьк более многословному:

public function isEmpty() {
    if (empty($this->find('count'))) {
        return true;
    }
    return false;
}

В принципе, уместно ли использовать хинтинг типа таким образом?

Ответы [ 4 ]

5 голосов
/ 10 декабря 2010

Как сказал Болт, это приведение , а не подсказка (что-то совсем другое).Кроме того, у вас это задом наперед.

Но:

public function isEmpty() {
    return !$this->find('count');
}

было бы хорошо.Вам не нужен приведение, поскольку ! обрабатывает его неявно.

4 голосов
/ 10 декабря 2010

Это не тип подсказки - это кастинг. Этот синтаксис на самом деле принимает значение выражения справа, и преобразует в указанный вами тип (в данном случае это boolean).

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

Кастинг происходит в соответствии с правилами, изложенными здесь: Тип каста . Вы должны будете перейти по ссылкам для любого типа (типов), которые вас интересуют. Правила для приведения к булеву здесь .

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

2 голосов
/ 10 декабря 2010

Почему бы вам просто не проверить, что вы хотите знать?

public function isEmpty() {
    return (0 == $this->find('count'));
}

Но да, я думаю, что ваша первая версия в некотором смысле подходит.

0 голосов
/ 10 декабря 2010

почему бы не сделать это?

return (empty($this->find('count'))) ? true : false;
...