Как структурировать мой PHP-проект?
Я собираюсь приступить к еще одному большому проекту PHP. На этот раз я намерен, чтобы папка проекта была аккуратной! Поэтому у меня есть несколько вопросов, касающихся поддержания моего проекта в чистоте и сухости:
Как различать исходные файлы PHP и файлы PHP, к которым должен обращаться браузер? Другими словами, как мне прояснить, какие файлы PHP дают выходные данные, а какие дают определения функций или классов?
Я планирую разделение моих функций PHP на статические классы, разделенные темой, например database::create() или editor:: write(). Что вы об этом думаете?
Я планирую создать PHP-файл " core.php", который будет включен в верхней части каждого файла PHP в проекте. Этот файл будет обрабатывать аутентификацию и включать базовые функции. Мысли?
проект будет сильно основан на Ajax. Это вызывает вопрос: Должен ли мой PHP функции являются фактическими функциями PHP или должны быть отдельными файлами PHP, которые принимают ввод GET или POST? Мой план выполняется и. Я создаю папку для исходных файлов PHP и один для файлов PHP "ajax" (или что-то еще), и последняя папка заполняется именами файлов по функциям, которые они будут выполнять. Затем PHP-файл будет просто содержать вызов функции и вывод записи для Ajax. Мысли?
любые другие комментарии или советы, Прежде чем я начну это проект был бы великолепен!
редактировать
возможно, мне не удалось подчеркнуть, насколько сильно Ajax будет основываться на этом веб-приложении. Codeigniter кажется отличным инструментом для создания веб-страниц или простых веб-приложений, таких как блог. Мое заявление будет немного другим. Как и uTorrent WebUI, мое веб-приложение будет статичным на одной странице, с Ajax, выполняющим все действия под крышкой. Кажется немного неудобным использовать Codeigniter для такого проект.
существует ли другая архитектура, созданная с учетом такого рода приложений?
4 ответов
вы рассматривали возможность использования фреймворка, такого как Codeigniter? Вы знакомы с какими-либо шаблонами дизайна, такими как MVC? Оба из них помогут диктовать местоположение файлов и разделение логики в вашем проекте.
EDIT: Codeigniter использует MVC, что является отличным шаблоном для веб-программирования. Проверьте эти два видео, которые у них есть для учебников. Только около 30 минут в сочетании и, безусловно, полные хороших знаний, как посмотреть на то, как работает их структура, а также понимание их структуру папок.
Если вы ожидаете, что это будет большой проект, я настоятельно рекомендую использовать одну из многих установленных фреймворков, таких как Symfony или Zend. Ты будешь:
- резко сокращая количество кода, которое вам нужно будет написать
- избегайте ошибок в ваших компонентах
- изучение лучших практик
но вы, если вы настаиваете на том, чтобы сделать это самостоятельно.
Я планирую создать файл PHP "сердечник.php", который будет включен в верхней части каждого файла PHP в проекте. Этот файл будет обрабатывать аутентификацию и включать базовые функции. Мысли?
Я не могу подчеркнуть достаточно "не делайте этого". Среди опытных разработчиков PHP существует правило, что любой проект с большим ядром.php-файл, который является предупреждающим признаком плохой разработки и его лучше избегать.
во-вторых, нет необходимости изобретать колесо, когда дело доходит до абстрактной базы данных, посмотрите на проекты pear MDB2 или Doctrine.
большое количество статических классов также является признаком плохо продуманного развития. Статические классы должны использоваться экономно, поскольку их трудно проверить и часто не требуется.
почему бы не иметь один индекс.php, который обрабатывает все выполнение, а затем имеет .htaccess файл, который будет направлять URL-адреса в правильное место. Это означает, что все вы можете войти в систему и проверить один файл.
вы можете иметь условие в верхней части всех ваших других файлов, поэтому они не могут быть доступны напрямую, как:
<?php if(FROM_INDEX!="true") die("<b>ACCESS_ERROR</b><br /><br />Please use the main page instead of accessing this file directly.");
Я также рекомендую Codeigniter, как это имеет много функций, как это уже и будет значительно ускорить ваше развитие время.
Я не уверен, насколько сложной системы вы ищете. Но недавно я нашел небольшую структуру, которая работает с url. https://github.com/ivorychicken/sammy
Если вы не против потратить время, чтобы поиграть с ним, вы, вероятно, могли бы использовать его в качестве отправной точки и построить из него.