Как использовать интерфейс countable в PHP.
Всем привет! В этой статье мы рассмотрим, как использовать интерфейс для счета в PHP.
Интерфейс для счета делает ваши классы очень гибкими, если они касаются хранения элементов. Например, это даст вам возможность использовать функцию count() в PHP для объекта, чтобы вернуть некоторое посчитанное число. Совсем не важно, что это за объект, главное, что можно посчитать.
Давайте рассмотрим пример:
class Collection {
protected $items = [];
public function __construct(array $items) {
$this->items = $items;
}
public function count() {
return count($this->items);
}
}
$collection = new Collection(['one', 'two', 'three']);
echo $collection->count();
Идея такая: вы имеете некоторое количество предметов, хранящееся в коллекции, вы можете передать их в конструктор при создании экземпляра объекта, вы можете иметь другие методы, которые будут добавлять предметы, но в нашем примере мы ограничимся конструктором. Дальшем мы создаем новую коллекцию, куда передаем три предмета(в нашем случае это строки). Теперь мы используем написанный нами метод count(), в котором помещаем массив в функцию count() и возвращаем результат.
Если мы запустим пример, то увидим 3, что и ожидалось. Однако использование этого интерфейса говорит нам о том, что мы не будем писать что-то вроде этого:
if($collection->count() > 0) {
}
Мы можем улучшить это, написав вот так:
if(count($collection) > 0) {
}
Это будет работать, но мы не получим ожидаемого результата, так как функция с аргументом в виде объекта вернет нам логическое значение 1.
Чтобы все начало работать так, как мы хотим, нужно всего лишь добавить наследование от интерфейса. Вот так:
class Collection implements Countable {
// код
}
Теперь при вызове функции count() с аргументом в виде объекта автоматически будет вызываться написанный нами метод count(), и все будет работать правильно.
Countable – это очень простой, но полезный интерфейс, который позволяет легко и просто производить подсчеты. Более подробную информацию вы можете найти на официальном сайте PHP.
Итак, на этом сегодня все. Спасибо за внимание!
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.