Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Отрицательное количество элементов (PHP)

Сегодня утром с разработчиками обсуждали фрагмент кода, где автор очень уж параноидально подошёл к проверке:

if (count($this->to) <= 0) {
    $this->validation_errors[] = "Неверный отправитель";
}

Проверять возвращает ли функция count значение меньшее нуля действительно странно, но я вдруг подумал — а можно ли в ПХП в припципе заставить эту функцию вернуть такое значение?

Дело в том, что функцию count можно использовать не только с примитивными типами (чаще всего её используют с массивами), но и с объектами, которые реализуют интерфейс Countable.

Оказалось вполне нормально работает:

$var = new class implements \Countable {
    public function count()
    {
        return -1;
    }
}

var_dump(count($var)); // выведет int(-1)

Выше код написан в синтаксисе ПХП7, который выйдет сегодня, но его можно переписать и на «пятёрку» — надо только дать имя классу.

2 комментария
Сергей Морозов (morozov.livejournal.com) 2015

Я бы перефразировал это условиее в не менее параноидальном, но более читаемом виде: if (count($this->to) < 1) — читается как «должен быть хотя бы один адресат». Кстати, у вас отправитель с адресатом, кажется, попутаны :-).

Евгений Степанищев (bolknote.ru) 2015

Комментарий для morozov.livejournal.com:

Кстати, у вас отправитель с адресатом, кажется, попутаны :-).

Я не помню точно, а смотреть мне не хочется, но это может быть разбор чего-то входящего (эл. письма, например).