Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 11:05   #1
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
Вопрос Обработка интепретатором php

До недавнего времени я думал что обработка php происходит так: код php страницы передается интерпретатору, тот построчно обрабатывает страницу и при встрече с <?php ?> обрабатывает код, после чего передает обычный html серверу, пока не столкнулся с такой конструкцией:
Код:
<?php
if ($expression) { 
    ?>
    <strong>Это истина.</strong>
    <?php 
} else { 
    ?>
    <strong>Это ложь.</strong>
    <?php 
}
?>
На многих сайтах этот пример называется "профессиональная встака", однако после такого примера я запутался как происходит обработка php страницы интерперетатором. Подскажите пожалуйста, а то в интернете не нашел ничего путного)
Викдон вне форума Ответить с цитированием
Старый 31.08.2010, 13:17   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

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

Такой стиль написания кода, который Вы привели ("профессиональная вставка") характерен для новичков, использующих визуальные редакторы. Лично Я рекомендую использовать следующую конструкцию:
Код:
<?php
$return = '';
if ($expression) { 
    $return = $return.'<strong>Это истина.</strong>';
} else { 
    $return = $return.'<strong>Это ложь.</strong>';
}
echo $return;
?>
Виталий Желтяков вне форума Ответить с цитированием
Старый 31.08.2010, 19:52   #3
Viconte
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 40
По умолчанию

Как это работает ? Рассмотрим работу PHP- интерпретатора.
Сначала начнем с этапа получения сервером запроса:
Получение запроса сервером.
Если запрашивается файл с расширением .html, то сервер отправляет все содержимое файла браузеру, а если запрашиваемый файл имеет расширение .php то сервер передает все содержимое файла PHP-интерпретатору на обработку.

Обработка файла PHP-интерпретатором.
Обработка файла происходит сверху вниз построчно. Рассмотрим пример:
Код:
 <html>
 <head>
	<title>Пример php сценария</title>
 </head>
 <body>
 	<?php  $a = 4;  ?>
 	<h1>Пример работы php сценария</h1>
 	<p>Применение php вставок</p>
 	<?php echo $a; ?>
 </body>
 </html>
PHP – интерпретатор обрабатывает содержимое файла построчно, начиная со строки под номером 1, и заканчивая строкой с номером 11. Когда интерпретатор встречает текст( <h1>Пример работы php сценария</h1> ) он его пропускает и идет дальше. Если интерпретатор встречает php-вставку, которая обозначается как <?php ?> или <? ?> , он начинает обрабатывать php - код этой php-втавки.
В строке 6 интерпретатор создает переменную $a со значением 4 и сохраняет ее в памяти. Эта переменная будет храниться в памяти до тех пор пока интерпретатор будет обрабатывать содержимое файла php. В строке о11 оператор echo выводит значение этой переменной, доказывая тем самым что переменная $a все еще храниться в памяти.
А теперь перейдем к подробному обсуждению самой конструкции:

Код:
<?php  if($expression) {  ?>
 <p>Текст этого параграфа будет вставлен если выражение истино</p>
 <?php  } else { ?>
 <p> Текст этого параграфа будет вставлен если выражение ложно</p>
 <?php } ?>
Интерпретатор работает так:

В первой строке происходит обработка php-втавки которая содержит незаконченное выражение: if($expression) { ( Обратите внимание на отсутствие закрывающей фигурной скобки ).
В этом случае интерпретатор ищет закрывающую фигурную скобку (“}”) в php коде и если ее не находит – то возникает ошибка. В данном случае интерпретатор находит ее в строке 3.
Теперь весь текст расположенный между открывающей и закрывающей фигурных скобок( строка 2 ) является содержимым блока условного оператора if( строка 1).
И в зависимости от значения выражения if($expression) строка 2 либо пропускается (true) либо удаляется (false).

В строке 3 обрабатывается условие else аналогично условию if.
Viconte вне форума Ответить с цитированием
Старый 01.09.2010, 00:17   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Такой стиль написания кода, который Вы привели ("профессиональная вставка") характерен для новичков, использующих визуальные редакторы.
Довольно-таки спорное утверждение,потому как:
1.Вот как позиционируют PHP его создатели:
Цитата:
PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML.
2.Они же и обозвали приведённый ТС пример "профессиональной вставкой" (Advanced escaping) - эти ребята совсем не новички.

3.Каждый разработчик может, конечно, использовать любой удобный лично для него стиль сочетания PHP и HTML - но при этом желательно,чтоб этот стиль был однообразным во всём проекте(проектах).
Я имею ввиду - нужно сразу определиться,будет ли это PHP в HTML , или же это будет HTML в PHP - и далее следовать в своём коде этой выбранной позиции.
Это повышает читабельность и понимание кода,особенно если далее ваш код будут сопровождать другие программисты,или же вы работаете в команде программистов - где есть свой стиль кодинга и сочетания PHP/HTML - тогда вам нужно привыкать и следовать этому стилю.

4. Ну и всё-таки желательно стремиться к разделению логики и представления - насколько это возможно.

Приведённый ТС пример(и подобные) я бы реализовал так:
Код:
<?php
if($expression){
    $phrase = 'This is true';
}else{
    $phrase = 'This is false';
}
?>
<strong><?php echo $phrase; ?></strong>
Andkorol вне форума Ответить с цитированием
Старый 01.09.2010, 07:49   #5
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
2.Они же и обозвали приведённый ТС пример "профессиональной вставкой" (Advanced escaping) - эти ребята совсем не новички.
Да, когда-то данный подход к написанию был действительно "профессиональным", но время течёт и всё меняется. Появились новые технологи и возможности реализации. И на данный момент эта "профессиональная вставка" уже устарела. Например, если вы используете на сайте ajax, то данная "вставка" вам уже не подойдет.
Цитата:
Каждый разработчик может, конечно, использовать любой удобный лично для него стиль сочетания PHP и HTML - но при этом желательно,чтоб этот стиль был однообразным во всём проекте(проектах).
Не буду спорить по этому поводу - тут всё верно. Но добавлю:
- Необходимо учитывать, что на этапе вывода (отправки данных клиенту) очень важен стиль написания кода и используемые функции. Очень часто новички используют не оптимизированные конструкции.
Виталий Желтяков вне форума Ответить с цитированием
Старый 01.09.2010, 08:45   #6
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Странное обсуждение.
Просто добавлю для топикстартера. Я так думаю ни Andkorol, ни Виталий Желтяков такими способами вставки не пользуются, так же как не пользуются ими и студии. В php уже давно правят шаблонизаторы и/или фреймворки. Программист в идеале вообще не должен видеть разметки. Разметка и код должны "мешаться" только в шаблонах, да и заниматься этим должна машина.

+ Конечно начинающему web-программисту нужно сначала поделать всё это руками, но и с освоением шаблонизаторов лучше не мешкать.
Стрелок-охотник

Последний раз редактировалось mv28jam; 01.09.2010 в 08:48.
mv28jam вне форума Ответить с цитированием
Старый 01.09.2010, 21:55   #7
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Принципиально не использую шаблонизаторы из-за низкой скорости обработки.
Виталий Желтяков вне форума Ответить с цитированием
Старый 02.09.2010, 12:58   #8
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Принципиально не использую шаблонизаторы из-за низкой скорости обработки.
Спорное утверждение.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP test.php?a=1&b=1 не работает передача параметров бедный_студент PHP 5 25.08.2010 23:08
Преобразование HTML-PHP в PHP с запуском в командной строке. TERAB1T PHP 4 01.06.2010 14:14
Обработка ошибок PHP BloodWizard PHP 1 30.05.2010 14:21
помощь по PHP(форма и обработка) Eugene811 PHP 7 11.05.2009 04:17