powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / А подскажите, как лучше распределять код PHP?
8 сообщений из 8, страница 1 из 1
А подскажите, как лучше распределять код PHP?
    #39143126
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ходу того, как приходится осваивать PHP, начинаю изобретать решения, которые наверняка ранее были уже разработаны.
Сейчас понемногу делаю достаточно объемный (в плане сценариев) сайт.
Одна крайность - весь код разместить в одном огромном PHP-файле.
Другая крайность - каждую функцию/процедуру разместить в отдельном файле и подключать нужные с помощью include.
Но оптимальное решение наверняка где-то между этими крайностями.
Посоветуйте, как определить границу, когда код выносить в отдельный файл, а когда не выносить?

Допустим у меня есть форма регистрации из двух шагов.
В первом шаге пользователь заполняет поля формы и отправляет форму на сервер.
Сервер обрабатывает данные, отправляет пользователю контрольный код по SMS и отображает второй шаг регистрации - форму с теми же полями readonly и полем для ввода контрольного кода. Пользователь вводит контрольный код и если он совпадает с тем, который был отправлен ранее сервером, то сервер выполняет определенные действия.
На серверной стороне, допустим, для регистрации используется следующая функция:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
function register($data, $prepare=true) {
  if ($prepare) {
    // первый шаг - проверка данных, отправка контрольного кода
    ... (много кода) ...
  } else {
    // второй шаг - проверка контрольного кода, регистрация
    ... (много кода) ...
  }
}


Стоит ли эту функцию разделять на две?
Или веб-сервер прочитает и обработает PHP-файл быстрее, чем будет выполняться include?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39143146
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курите мануалы по MVC!

Сваливать всё в один фаил не есть гуд и откровенный моветон! ))

Почитайте также про Фреймворки!
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39143969
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

В данном вопросе нету строгого следования каким либо правилам. Это как абзацы в тексте :) Они появляются лишь от интуитивного (чаще субъективного) разделения рассказа на части. Точно так же и с файлами и кодом: понимается интуитивно.

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

Если пишите не в процедурном стиле, а объектно ориентированный код, там принято один класс - один файл :) В редких случаях замечал другую логику разбиения )

P.S. Не забываем также про такое расплывчатое понятие как "уровни абстракции". Функционал двух разных уровней в один файл пихать также не следует (в последующем не кисло с толку сбивает) :)
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39144002
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё раз про MVC И патерны вообще.

следует разделять логику приложения, и представление(html)
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39144007
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если говорить о семантике, то в этом случае логику разделения кода на файлы я более-менее себе представляю.
Я несколько про другое хотел спросить.
Вот если мой же код брать, его можно записать так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function register($data, $prepare) {
  if (!isset($data) || !isset($data['username']) || !isset($data['password'])) {
    return array('error'=>"Не заполнены обязательные поля");
  }
  ...
  if ($prepare) {
    $res = register_prepare($data);
  } else {
    $res = register_process($data);
  }
  if (!isset($res)) {
    return array('error'=>"Сбой регистрации");
  }
  if (isset($res['error'])) {
    return array('error'=>$res['error']);
  }
  ...
}

function register_prepare($data) {
  ...
}

function register_process($data) {
  if (!isset($data['code'])) return array('error'=>"Контрольный код не задан");
  ...
}


А можно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function register($data, $prepare) {
  if (!isset($data) || !isset($data['username']) || !isset($data['password'])) {
    return array('error'=>"Не заполнены обязательные поля");
  }
  ...
  if ($prepare) {
    include("register_step1.php");
    $res = register_prepare($data);
  } else {
    include("register_step2.php");
    $res = register_process($data);
  }
  if (!isset($res)) {
    return array('error'=>"Сбой регистрации");
  }
  if (isset($res['error'])) {
    return array('error'=>$res['error']);
  }
  ...
}



Есть ли практический смысл во втором варианте?
С одной стороны сервер не будет загружать PHP-код, который не будет использоваться.
С другой стороны у include есть накладные расходы и возможно они превышают экономию.
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39144021
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню, почему у меня такой вопрос возник.
Я вообще не программист, но когда приходилось писать программы, это были обычно прикладные приложения (десктопные приложения или скриптовые утилиты для серверов). У прикладных приложений вся логика работы уже включена в исполняемые файлы и они обычно работают бесконечно по меркам машинного времени (то есть приложение запустилось, затем пользователь выполняет с ним какие-то сценарии и через какое-то время приложение закрывает). В процессе работы с приложением пользователь выполняет множество сценариев, поэтому логично что в память загружается сразу весь программный код приложения.
А веб-приложение работает по другому. Сложный сайт может содержать сотни сценариев, но когда веб-сервер отрабатывает запрос посетителя, выполняется только один сценарий из сотни. И загружать весь программный код веб-приложения для каждого запроса скорее всего неэффективно (во всяком случае об этом свидетельствует то, что популярные фреймворки и CMS так не поступают).
И честно говоря, такое меня несколько напрягает (хотя может быть я просто еще не привык к такой парадигме). Такой проблемы нет при использовании контроллера страниц (для каждого сценария свой скрипт), но мне нужна единая точка входа и соответственно я использую контроллер запросов.
Если говорить в терминах MVC, то сейчас я структурирую код таким образом, чтобы одна модель оказалась в одном файле. Но некоторые модели получаются весьма объемными и меня беспокоит то, что из нескольких десятков килобайт загруженного исходного кода модели в конкретном сценарии используется только 10-20%.
Или это все ерунда и файловый кеш это полностью нивелирует?
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39144099
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

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

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

Вообще на таком уровне ни разу не проводил оптимизацию (никогда не требовалось). Не думаю, что те считанные килобайты кода сильно будут заметны на фоне расхода памяти на нужды интерпретатора. Потому делить стоит, по-моему, не с расчётом на экономию памяти, а с расчётом на экономию времени и сил при поддержке и доработке кода.
...
Рейтинг: 0 / 0
А подскажите, как лучше распределять код PHP?
    #39144137
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
 if (!isset($data) || !isset($data['username']) || !isset($data['password'])) {



http://symfony.com/doc/current/book/forms.html
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / А подскажите, как лучше распределять код PHP?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]