Как мне структурировать свой PHP-проект?

Я собираюсь приступить к еще одному большому проекту PHP. На этот раз я намерен привести папку с проектом в порядок! Итак, у меня есть несколько вопросов, касающихся содержания моего проекта в чистоте и СУХОМ:

  • Как отличить исходные файлы PHP от файлов PHP, к которым должен обращаться браузер? Другими словами, как мне прояснить, какие файлы PHP выдают вывод, а какие - определения функций или классов?

  • Я планирую разделить свои функции PHP на статические классы, разделенные по темам, например database :: create () или editor :: write (). Что вы думаете об этом?

  • Я планирую создать файл PHP "core.php", который будет включен в начало КАЖДОГО ОДНОГО файла PHP в проекте. Этот файл будет обрабатывать аутентификацию и включать базовые функции. Мысли?

  • Проект будет в значительной степени основан на Ajax. Возникает вопрос: должны ли мои функции PHP быть фактическими функциями PHP или они должны быть отдельными файлами PHP, которые принимают ввод GET или POST? Мой план делает и то, и другое. Я создаю папку для исходных файлов PHP и одну для файлов «ajax» PHP (или чего-то еще), и в последнюю папку заполняю имена файлов по функциям, которые они будут выполнять. Затем файл PHP будет просто содержать вызов функции и вывод для Ajax. Мысли?

Любые другие комментарии или советы, прежде чем я начну этот проект, были бы замечательными!


Редактировать

Возможно, я не смог подчеркнуть, насколько сильно это веб-приложение будет основано на Ajax. Codeigniter кажется отличным инструментом для создания веб-страниц или простых веб-приложений, таких как блог. Мое приложение будет немного другим. Как и uTorrent WebUI, мое веб-приложение будет статичным на одной странице, а Ajax будет выполнять все скрытые действия. Использование Codeigniter для такого проекта кажется немного неудобным.

Есть ли другая архитектура, созданная для такого рода приложений?


person Hubro    schedule 16.02.2011    source источник
comment
Что вы думаете о принятии архитектуры MVC?   -  person Robin    schedule 16.02.2011
comment
Я, наверное, так и сделаю, но существующие фреймворки f.ins. Codeigniter, похоже, предполагает, что мое веб-приложение изменит свой URL. Все мое приложение будет одной страницей, как и uTorrent WebUI.   -  person Hubro    schedule 16.02.2011


Ответы (4)


Думали ли вы об использовании фреймворка, такого как Codeigniter? Вы знакомы с какими-либо шаблонами проектирования, такими как MVC? И то, и другое поможет определить расположение файлов и разделение логики в вашем проекте.

РЕДАКТИРОВАТЬ: Codeigniter использует MVC, что является отличным шаблоном для веб-программирования. Посмотрите эти два видео, которые у них есть для учебных пособий. Всего около 30 минут вместе и определенно полон хороших знаний, как взгляда на то, как работает их фреймворк, так и понимания, предлагаемого их структурой папок.

РЕДАКТИРОВАТЬ2: http://codeigniter.com/tutorials

person Josh    schedule 16.02.2011

Если вы ожидаете, что это будет большой проект, я настоятельно рекомендую использовать один из многих уже существующих фреймворков, таких как Symfony или Zend. Вы бы:

  • резко сократить количество кода, который вам придется писать
  • избегайте ошибок в ваших компонентах
  • изучение передового опыта

Но вы, если настаиваете на том, чтобы сделать это сами.

Я планирую создать файл PHP "core.php", который будет включен в начало КАЖДОГО ОДНОГО файла PHP в проекте. Этот файл будет обрабатывать аутентификацию и включать базовые функции. Мысли?

Я не могу достаточно подчеркнуть «не делай этого». Среди опытных разработчиков PHP существует правило, согласно которому любой проект с большим файлом core.php является предупреждением о плохой разработке и его лучше избегать.

Во-вторых, нет необходимости изобретать велосипед, когда дело доходит до абстрактной базы данных, посмотрите на проекты MDB2 или Doctrine.

Большое количество статических классов также является признаком плохо продуманной разработки. Статические классы следует использовать с осторожностью, поскольку их сложно тестировать, и часто они не нужны.

person xzyfer    schedule 16.02.2011
comment
Не могли бы вы развить свое утверждение с помощью большого признака core.php? - person erisco; 16.02.2011
comment
@erisco: Лучше всего разбить ядро ​​на несколько разных классов, чтобы избежать раздувания. Допустим, ваше ядро ​​отправляет электронные письма и проверяет формы. Вам не нужно загружать электронную почту при каждой загрузке страницы, так зачем загружать все это? Разбейте его на классы. Если вы уже знаете PHP, изучение фреймворка может только помочь. - person Josh; 16.02.2011
comment
@Josh: Что, если core.php обрабатывает автозагрузку классов, а также авторизацию? Это будет плохой core.php? @xzyfer: Я никогда не говорил, что core.php будет большим, только то, что он будет обрабатывать основы, которые требуются каждому файлу php, такие как функции, которые я заявил 2 предложения назад. Это также причина, по которой я хотел бы сгруппировать свои функции и классы, чтобы их можно было загружать с помощью автозагрузки. Что ты думаешь по этому поводу? - person Hubro; 16.02.2011
comment
Я понимаю, откуда вы идете; Я думаю, что вы продвигаете логическое разделение кода на отдельные файлы для ясности и простоты разработки. Однако влияние синтаксического анализа дополнительного кода на производительность очень незначительно; на самом деле, я уверен, что вы, вероятно, увидите общую худшую производительность с многофайловой кодовой базой по сравнению с однофайловой кодовой базой просто из-за дискового ввода-вывода. Кеши кодов операций меняют эту историю. - person erisco; 16.02.2011

Почему бы не иметь один index.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, так как он уже имеет много подобных функций и значительно ускорит время разработки.

person Kieran Andrews    schedule 16.02.2011

Я не уверен, насколько сложна система, которую вы ищете. Но недавно я нашел небольшую структуру, которая работает с URL-адресом. https://github.com/ivorychicken/sammy

Если вы не против потратить время на то, чтобы поиграть с ним, вы, вероятно, могли бы использовать его как отправную точку и развивать его.

person Baylor Rae'    schedule 16.02.2011