Создание собственного фреймворка php


Я заинтересован в создании собственного фреймворка php для личного использования, чтобы облегчить себе жизнь в области программирования. Я делаю это, так как сейчас я довольно (вроде) привык к php и, похоже, не могу привыкнуть ни к какому фреймворку.

У меня есть идея создать множество функций в файле .php. Как я уже начал делать, для функции отправки почты я упростил ее (для моего использования):

function sendmail($to, $message, $subject, $from){//USE sendmail($to, $message, $subject, $from)
$headers  = "From:";
$headers .= $from;
$headers .= "\r\n";
$headers .= "Reply-To:";
$headers .= $from;
$headers .= "\r\n";
$headers .= "X-Mailer: Drupal\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
mail($to, $subject, $message, $headers);
}

Затем это будет использовано в контактной форме:

sendmail($_POST['to'], $_POST['message'], $_POST['subject'], $_POST['from']);

Эта почтовая функция работает для я.

Однако я совсем не уверен, правильно ли это для создания такой структуры. Я изучил классы и объекты для php, но, похоже, не могу их понять, так как нет понятного/простого учебника.

Author: ryryan, 2010-09-29

10 answers

Люди скажут вам, чтобы вы не писали свой собственный фреймворк, а использовали существующий. Не слушайте их. Это хороший опыт обучения, который поможет вам понять концепции, которые сделают другие фреймворки более понятными для вас.

Мне лично нужно было лучше понять 2 вещи, прежде чем я смогу использовать фреймворки других людей (и, очевидно, написать свои собственные):

  1. ОП
  2. MVC

Я целыми днями читал каждый учебник по ООП на PHP и каждая учебная/вики-страница на MVC. Затем в качестве учебного опыта я написал свой собственный фреймворк. Затем я научился на своих ошибках, начал с нуля и написал еще один фреймворк. Я, наверное, написал 5 версий. Затем я решил попробовать кодовый воспламенитель. После всего прочитанного и практики я, наконец, понял это.

С тех пор я использую только фреймворки других народов.

 35
Author: Galen, 2010-09-29 16:31:03

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

Сказав это, структура очень архитектурна по своей природе и, следовательно, возможно, не лучшее место для начала. Простая библиотека служебного кода намного лучше, и это именно то, что делает OP (кроме терминологических проблем). Хорошо для него.

Что касается того, чтобы всегда использовать существующие рамки, когда приходит время стать серьезным, у меня есть глубоко укоренившиеся сомнения по этому поводу. Во-первых, нет идеального структура или даже любая структура, которая более чем незначительно подходит для любых целей. Большинство фреймворков общего назначения являются чрезмерно сложными ленивцами производительности по сравнению с кодом, настроенным вручную для своей цели. Таким образом, для опытной команды, работающей над сложными приложениями реального мира, платформа GP часто будет плохой идеей. Вот почему, когда дело доходит до таких фреймворков, я предпочитаю такие, как Zend, которые позволяют вам выбирать необходимые функции, не прибегая к обоим ноги.

Что еще более важно, за ~30 лет, что я разрабатываю программное обеспечение, я видел множество фреймворков, даже с почти 100% насыщенностью рынка и поддержкой крупных поставщиков, просто умирают. Когда это происходит, разработчики оказываются в затруднительном положении. И нет, наличие открытого исходного кода не облегчает эту проблему. Если многим опытным людям требуются годы, чтобы разработать, а затем поддерживать большую структуру, как работает небольшая команда внутри компании - часто только с одним или двумя действительно опытными люди - должны реально поддерживать проект, когда он выходит из моды и начинает умирать? Это происходит и с меньшими проектами кода: посмотрите на состояние смерти, в котором сейчас находятся многие некогда популярные библиотеки PEAR.

 7
Author: mr. w, 2010-09-29 17:05:14

Может быть полезно взглянуть на этот простой php-фреймворк Тайлера Холла для некоторых идей.

Удачи!

 2
Author: Galwegian, 2010-09-29 16:13:43

Если вы хотите использовать фреймворк для личного использования, вам следует использовать одно из установленных предложений с открытым исходным кодом, таких как CakePHP, симфония, Zend или Конструктор кода. Эти фреймворки разрабатывались и тестировались в течение многих лет талантливыми веб-разработчиками и, скорее всего, более чем удовлетворят ваши потребности. Единственный раз, когда вы должны создать свой собственный фреймворк, - это в образовательных целях или если существующие фреймворки не соответствуют вашим требованиям. Нет нужно заново изобрести колесо.

Из википедии:

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

Это именно то, к чему стремятся эти фреймворки, и они довольно успешны в этом.

Используя их, вы будете также научитесь ценить их решения, а также понимать, как они используют ООП для веб-разработки, расширяя свои знания как разработчика.

 2
Author: webbiedave, 2010-09-29 16:19:42

Другие ответили на ваш вопрос о фреймворке (только создайте что-то для ценности обучения, в противном случае научитесь использовать одну из лучших существующих зрелых фреймворков и библиотек), но я просто хочу указать на небольшую проблему с вашим кодом, весь смысл наличия сигила $ перед var заключается в том, что вы можете легко сделать

$headers  = "From:$from\r\n";

Вместо

$headers  = "From:";
$headers .= $from;
$headers .= "\r\n";
 2
Author: Pat, 2010-09-29 16:22:17

Возможно, это будет слишком жестко, но: не рассматривайте возможность создания собственной платформы, если вы полностью не понимаете объектно-ориентированное программирование. Знания ООП будут развиваться из вашего процедурного программирования, когда вы приобретете больше опыта.
Создание PHP-файла, содержащего ваши часто используемые функции, - хорошая идея, и я бы сказал, что это так. Но не называйте это фреймворком:)

 1
Author: Karel Petranek, 2010-09-29 16:14:54

Как бы это ни было восхитительно, если вы даже не знаете, каковы основные принципы построения фреймворка, особенно шаблоны, и не полностью основываетесь на ООП и не чувствуете себя комфортно при его написании, то как вы ожидаете достичь своей цели? Вы не обязательно многому научитесь, написав код самостоятельно, т. Е. Если вы напишете плохой код 40 раз, это не научит вас чему-то (кстати, это не личная критика в ваш адрес), а прочитав код других людей, который будет как хорошим, так и плохим и равнодушный, тогда ты научишься.

 1
Author: PurplePilot, 2010-09-29 16:16:48

Обычно Структура имеет конкретную цель. Фреймворк может поддерживать CMS, 3D-движок, систему доступа к данным и т.д... вы часто можете видеть несколько фреймворков, используемых вместе для достижения конечной цели, например, использование Spring, Hibernate и JavaEE для создания веб-приложения на основе Java.

Судя по всему, вы собираете все свои любимые функции в один файл (или вы группируете их в разные файлы по функциональности?). Это может быть полезно, но я не назвал бы это рамками - пока. Это действительно библиотека. Если все ваши функции предназначены для поддержки необычной функциональности электронной почты, изучите ООП и создайте структуру, единственной целью которой является предоставление простого в использовании интерфейса для необычной функциональности электронной почты.

 1
Author: FrustratedWithFormsDesigner, 2010-09-29 16:16:53

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

Здесь есть список со многими популярными фреймворками и сравнение - phpframeworks.com . Я также мог бы порекомендовать вам CodeIgniter - хороший для начинающих, довольно простой и в то же время основанный на MVC.

 1
Author: Mario Peshev, 2010-09-29 16:19:06

Это не отвечает на ваш вопрос о структуре, но если вы используете:

$headers  = "From:";
$headers .= $from;
$headers .= "\r\n";

И:

sendmail($_POST['to'], $_POST['message'], $_POST['subject'], $_POST['from']);

Люди попытаются добавить дополнительные заголовки электронной почты в ваше поле $from, разместив

'Name\r\nAnyotherheader:date\r\n' 

В ваше поле $из .

Не говоря уже о проблеме людей, которые просто используют его для спама, если вы разрешите им поле $_POST['кому'].

 1
Author: SomeGuy, 2011-06-24 18:14:45