ghaiklor
@ghaiklor
NodeJS TechLead

Как вы организовываете модульность в ваших PHP-проектах?

Привет, Хабр.

В планах вот сделать игру и зная, что это огромное количество кода, хочу сразу решить проблему с модульностью. На данный момент использую такую схему:
1) Каждый класс — это отдельный файл. Например, Foo.php (namespace Game; class Foo) и т.д.
2) Все необходимые классы подключаю через include_once в каждый из классов. Пример:
//index.php
include_once './session.php';
include_once './database.php';
include_once './include/Map.php';
include_once './include/Town.php';
include_once './include/Game.php';

$game = new \Andromeda\Game();

//Game.php
namespace Andromeda;
include_once './../database.php';
include_once './../session.php';
include_once './Map.php';
include_once './Town.php';

class Game
{
    private $db = '';

Но при таком подходе не развернешься, т.к. постоянно валится ошибка 500. Посоветуйте, каким образом все же лучше структурировать свой проект?
P.S. C PHP знаком не очень сильно. Зачастую все писалось на чистом JS. Теперь понимаю, что жс не хватит и хочешь-не хочешь, а пхп нужно крутить.
P.P.S. Может даже фреймворк какой-нибудь можно использовать?
  • Вопрос задан
  • 4081 просмотр
Решения вопроса 1
avalak
@avalak
1. Если чистый php то менеджер зависимостей Composer + и стандарты PSR
2. Либо фреймворк Yii/Yii2, Symfony 2 (недостатка в фреймворках нет) + Composer (Yii 2 поддерживает composer, но он в разработке. Symfony 2 поддерживает composer)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@egorinsk
Прочитайте про автозагрузку классов (autoloading)
Ответ написан
Комментировать
konst20
@konst20
Программист, преподаватель, немного электронщик
Вместо всей этой пачки инклудов вставьте куда-нибудь вот такое
function class_loader($className){
      include_once $className.'.php';
}

spl_autoload_register('class_loader');

Файлы будут инклудится по мере создания объектов.
Имя файла должно совпадать с именем класса.
Конструкция не конфликтует с другими автолоадерами, проверено.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы