Создание собственной PHP-фреймворка - PullRequest
8 голосов
/ 29 сентября 2010

Я заинтересован в создании собственной 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, но не могу понять их, так как нет понятного / простого учебника.

Ответы [ 10 ]

35 голосов
/ 29 сентября 2010

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

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

  1. ООП
  2. MVC

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

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

7 голосов
/ 29 сентября 2010

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

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

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

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

2 голосов
/ 29 сентября 2010

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

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

вместо

$headers  = "From:";
$headers .= $from;
$headers .= "\r\n";
2 голосов
/ 29 сентября 2010

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

Из wikipedia :

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

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

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

2 голосов
/ 29 сентября 2010

Может быть полезно взглянуть на эту простую php framework от Tyler Hall для некоторых идей.

Удачи!

1 голос
/ 24 июня 2011

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

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

и:

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

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

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

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

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

1 голос
/ 29 сентября 2010

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

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

1 голос
/ 29 сентября 2010

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

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

1 голос
/ 29 сентября 2010

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

1 голос
/ 29 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...