К сожалению, использование объектно-ориентированных возможностей PHP встречается не так часто, как хотелось бы. Конечно, тут есть объективные причины, например, не все хостеры предоставляют PHP5 (именно с этой версии появилась нормальная поддержка ООП). К тому же, огромное количество PHP скриптов написано без использования ООП. И во многих случаях нет необходимости их переписывать. Но ООП – это не «модная фишка». Эта парадигма программирования при правильном использовании позволяет сделать php скрипты понятнее, сократить количество ошибок, и, самое главное, увеличить скорость разработки (за счет повторного использования кода). В этой заметке я хочу рассказать о нескольких таких возможностях и показать пример работы с SPL (StandardPHPLibrary). Предположим, у нас есть задача, нужно отсортировать массив. Ничего сложного, можно просто использовать функцию sort. Но, представим, что задача немного сложнее. Сортировать нужно сложные объекты, например, экземпляры классов. Они обычно содержат несколько свойств (переменных), каждое из которых может быть использовано при сортировке. В таком случае можно написать собственную функцию сравнения двух объетов (назовем ее cmpObjects), а затем использовать функцию uasort.
Ей в первом параметре передается массив, а во втором – имя функции, которая сравнивает объекты. В принципе, задача решена. Но функция cmpObjects, с точки зрения PHP, никак не связана с объектами, которые она сравнивает. Хотя очевидно, что использовать ее с другими объектами будет бессмысленно. ООП позволяет устранить этот недосток. Идея заключается в том, чтобы поместить функцию сравнения внутри класса, экземпляры которого она сравнивает.
Примечание. Если следовать терминологии ООП, то функции, объявленные внутри класса, нужно называть методами, а переменные – свойствами. Рассмотрим конкретный пример.