2015-10-23 4 views
0

Ну, я в настоящее время работаю над переработкой бэкэнда PHP (sorta, создающим собственную CMS) на личном веб-сайте для удовольствия, а также с его использованием в качестве возможности обучения.PHP классы и организация кода

Я пытаюсь изучить методы ООП в PHP, поскольку классы кажутся отличным способом сохранить код более организованным и свести к минимуму повторное использование кода. (Хотя код повторное использование не обязательно более распространены в системах, отличных от OOP, если они предназначены правильно)

Мой вопрос касается, как я должен обрабатывать организуя различные классы:

я организовал свой проект на листе бумаги в форме, аналогичной этому:

<!-- 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 
    } 
?> 

Теперь это хорошо работает ... иш. Но я добираюсь до точки, где я создаю несколько классов, которые в какой-то момент должны будут общаться друг с другом; в настоящее время мое решение состоит в том, чтобы заставить их общаться через их родительский класс, однако наличие «родственных» классов, разговаривающих друг с другом, кажется взломанным, поэтому я хотел бы задать , если я правильно понимаю ООП или нет.

Многие должности в ООП настолько разнообразны, и у многих людей такие широкие взгляды на дизайн кода, и я не уверен, какие из них «правильные». (по крайней мере ... с точки зрения того, что мой проект будет несколько «стандартным»)

+2

Смотрите это: https://www.youtube.com/watch?v=IKD2-MAkXyQ – Axalix

+0

@Axalix Это видео действительно дало мне совершенно новый метод, на который нужно смотреть; к счастью, моего кода все еще достаточно в детстве, где это не должно быть слишком сложно, и я буду смотреть дальше. – Awesomolocity

+0

Добро пожаловать. Я давно помню эту ссылку для меня: https://docs.phalconphp.com/ru/latest/reference/di.html – Axalix

ответ

2

Необходимо использовать контейнер для инъекций зависимых, например, Symfony Dependency Injection component (который может использоваться автономно, как описано в статье) для обработки этого сообщения.

Это сделает загрузку классов более эффективной (с использованием lazy instantiation), а также сделает ваши классы более легкими для модульного тестирования изолированно.

+0

Спасибо за этот ответ; вы второй человек, чтобы указать мне на компонент инъекции зависимостей в течение примерно 2 минут, поэтому я предполагаю, что это определенно то, что я должен изучить и буду делать в течение следующих нескольких дней. – Awesomolocity

Смежные вопросы