Мне нужно разработать небольшую CMS с использованием PHP, и сейчас я пытаюсь выяснить структуру.
CMS будет сгенерирован с использованием набора функций. Такие вещи, как функции базы данных, кэширование предметов, интернационализация и тому подобное.
Я думал сделать это вот так:
сделать функции нестатических методов частью большого класса «сайта»; таким образом я мог запускать несколько экземпляров этого класса. Не уверен, что мне нужно будет это сделать ..
или разделять функции на отдельные классы со статическими методами
Основная проблема здесь в том, что CMS должна иметь возможность управлять несколькими небольшими сайтами, а не только одним. Таким образом, либо я делаю все методы статическими и добавляю функцию «переключатель сайта», либо делаю их обычными объектами, которые я создаю на основе сайта, который я хочу управлять
Какой из них был бы лучшим вариантом?
Я бы определенно предложил использовать статические классы для этой работы. Переход по этому маршруту создаст псевдопространство имен для всех ваших функций, поэтому вам не придется беспокоиться о конфликтующих именах функций и т. Д., А также не позволяет вам передавать экземпляр вашего вспомогательного класса только для вызова одного из ваших вспомогательные функции.
Статические методы обычно представляют собой плохую практику. Они представляют много потенциальных проблем.
1) Они вводят скрытые зависимости. Код, который произвольно вызывает foo :: bar (), имеет зависимость от foo и не может работать без определения foo. Объект, использующий foo :: bar (), будет правильно построен, но не будет использоваться, если foo не определен.
2) Статика – это глобалы. Глобальное состояние очень плохое, что-то может изменить код, и его состояние неизвестно. Вы жертвуете силой и контролем, достигнутыми инкапсуляцией ООП, используя статические методы.
3) Невозможно заменить функции для другой версии
4) Это делает модульное тестирование невозможным.
Более подробную информацию и примеры кода см. В этой статье и в этой статье.