Ну, в настоящее время я работаю над переработкой бэкэнда PHP (своего рода создание собственной CMS) на персональном веб-сайте для развлечения, а также использую его как возможность обучения.
Я пытался изучить методы ООП в PHP, так как классы кажутся отличным способом сохранить код более организованным и минимизировать повторное использование кода. (Хотя повторное использование кода не обязательно более распространено в неопорных системах, если разработано правильно)
Мой вопрос касается того, как я должен справиться с организацией различных классов:
Я организовал свой проект на листе бумаги в форме, подобной этой:
<!-- language: lang-php -->
<?php
class main_website{
#Has a bunch of universal configuration such as a connection to the database
function __construct($includes='webpage1.class.php'){
#will include anything listed above
}
}
class users extends main_website{
#functions relating to users
}
class webpages extends main_website{
#functions relating to all web-pages
}
class webpage1 extends webpages{
#has a set of functions that relate specifically to webpage 1 and won't be used elsewhere
}
class webpage2 extends webpages{
#has a set of functions that relate specifically to webpage 2 and won't be used elsewhere
}
?>
Теперь это работает хорошо … иш. Но я дошел до того, что создаю несколько классов, которые в какой-то момент должны будут общаться друг с другом; в настоящее время мое решение состоит в том, чтобы они общались через родительский класс, однако общение между «родными» классами кажется хакерским, поэтому я хотел бы спросить правильно ли я понимаю ООП или нет.
Многие посты на ООП настолько разнообразны, и многие люди имеют такие широкие взгляды на дизайн кода, и я не уверен, какие из них «правильные». (по крайней мере … правильно с точки зрения того, чтобы мой проект был несколько «стандартным»)
Вы должны использовать контейнер для внедрения зависимостей, например Symfony’s Компонент внедрения зависимостей (который может использоваться автономно, как описано в статье) для обработки этого сообщения.
Это сделает загрузку классов более эффективной (используя ленивый экземпляр), а также упростит проведение ваших классов для самостоятельного тестирования.
Других решений пока нет …