Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 20:17:00
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

Программирование на PHP


PHP

Что такое PHP

PHP (Hypertext PreProcessor) – один из самых популярных инструментов веб-программирования на стороне сервера. Работа PHP в самом простом варианте сводится к обработке http запроса клиента. Обработка запроса, в свою очередь, заключается в программном формировании гипертекста в соответствии с параметрами запроса, после чего полученная разметка возвращается клиенту. Когда клиент (интернет браузер) запрашивает обычную статическую интернет страницу (чаще всего с расширением html), сервер в качестве ответа возвращает ему содержимое этой страницу без изменений “как есть”. Если запрашивается php страница, то в процессе обработки запроса содержимое указанной страницы сначала обрабатывается интерпретатором PHP, и только потом результат этой обработки отправляется клиенту.

Другими словами, PHP – это препроцессор гипертекста, что и отражено в его названии. Препроцессор потому что окончательной обработке гипертекст подвергается уже на стороне клиента, результат которой мы видим в окне браузера (процессором гипертекста является уже сам браузер). Можно сказать, что PHP – это генератор гипертекста, поскольку в большинстве случаев его работа – это программная генерация HTML разметки по содержимому базы данных или по любой другой структурированной информации, размещенной на сервере. Аббревиатура выглядит, как PHP, а не как, к примеру, HPP или иначе, поскольку первоначально расшифровывалась как Personal Home Page Tools – инструментарий для создания персональных интернет страниц. Таким образом, первый вариант расшифровки PHP отражал его назначение, а нынешний – принцип работы.

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

  • обработка и извлечение параметров http запросов GET и POST;
  • формирование и отправка http заголовков;
  • инфраструктура для хранения данных сеанса;
  • программные сервисы для работы с cookies;

    cookies - текстовые данные, сохраняемые браузером на компьютере клиента, которые чаще всего содержат параметры доступа (логин и пароль) или персональные настройки пользователя. Cookies формируются браузером и автоматически, в ходе каждого удаленного обращения пересылаются серверу в заголовках http запроса.

  • работа с файлами по FTP протоколу;
  • работа с базами данных посредствам SQL запросов;
  • поддержка регулярных выражений;
  • поддержка HTTP авторизации;
  • обмен сообщениями по электронной почте и многое другое.

В этом разделе я планирую кратко рассматривать ключевые моменты применения PHP для создания несложных веб-приложений. Материалы будут организованы в несколько разделов, по каждому из которых будут приведены примеры с их исходным кодом. Для самостоятельных экспериментов необходим свой сайт или любой другой сайт, к которому у вас имеется полный доступ, и на сервере которого установлен PHP.

Основы программирования на PHP

  1. Добавление PHP в HTML код
  2. Приложение из нескольких php файлов
  3. Переменные и функции
  4. Операторы
  5. Массивы, строки и другие элементы программирования на PHP

Добавление в разметку кода PHP и результат работы препроцессора гипертекста

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

<?php
  код программы
?>

В ходе работы PHP интерпретатора секции <?php … ?> заменяются на разметку, формируемую в результате работы размещенного в них программного кода. Для вывода результата работы препроцессора используется оператор echo, аргументами которого могут быть константы, переменные, функции или различного рода выражения, а результатом – текст. Самый простой вариант может выглядеть следующим образом:

<?php
  echo "<h1>данная разметка сформирована программно интерпретатором PHP.</h1>";
?>

Если вы откроете исходный код полученной страницы в браузере, то никакого PHP там уже не будет (если, конечно, на сервере установлен интерпретатор PHP). Смысла в таком использовании оператора echo не особо много. Вся прелесть PHP в том, что формируемый HTML может зависеть от параметров запроса, содержимого базы данных, политики безопасности и многого другого. Анализ и обработка всего этого выполняется с использованием знакомых практически всем конструкций процедурного языка программирования, таких как циклы, условия, функции и т.п. Забегая вперед, приведу небольшой пример программы на PHP c использованием цикла и условного оператора, с тем, чтобы начальное представление о препроцессоре гипертекста стало более полным. Следующая программа выводит значения факториала чисел от 1 до 9.

<html>
 <head>
  <title>Пример программы на PHP</title>
 </head>
 <body>
  <?php
   echo "<h1>данная разметка сформирована программно интерпретатором PHP.</h1>"; 
   $f=1;
   for ($i=1; $i<10; $i++)
   {
    if ($i>1)
        $f=$f*$i;

    echo $i,"!=",$f,"<br/>";      
   } 
  ?> 
 </body>
</html>

Результат ее работы будет выглядеть в браузере примерно следующим образом:

1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880

Организация приложения из нескольких файлов PHP

Многие интернет сайты состоят из страниц, которые созданы по одному и тому же шаблону. Меняется только содержимое основной области. Одним из наиболее важных применений PHP является возможность описания шаблонов (макетов) динамических веб-страниц. Сам макет веб-страницы представляют в виде набора областей: заголовок, левая и правая панели, основная область, подвал и т.д. и для каждой из них создают отдельный php файл, генерирующий соответствующую часть разметки. Для создания страницы сайта по такому шаблону достаточно подключить нужные области, добавив ссылки на созданные php файлы в определенном порядке, а в качестве содержимого добавить только разметку для основной области, которой страница будет отличаться от всех остальных разделов сайта.

Для подключения внешнего файла в php имеются две инструкции require и include. Инструкция require вставляет содержимое указанного файла до начала обработки программного кода интерпретатором PHP, а инструкция include включает его в процессе обработки – когда интерпретатор дойдет до соответствующей строки в программе. Вот так может выглядеть разметка интернет страницы, создаваемой по шаблону.

<?php
require "header.php";
require "side_left.php";
?>
  разметка основной области
<?php
require "side_right.php";
require "footer.php";
?>

Таким образом, если файл, на который ссылается инструкция require, недоступен, то дальнейшая обработка страницы завершается. В случае с include обработка недоступного файла просто пропускается, и продолжается обработка оставшегося PHP кода. Как следствие того, что ссылки include обрабатываются в процессе интерпретации, подключением php файла с помощью этого оператора можно управлять в зависимости от различных условий, с использованием оператора if, многократно в теле цикла for и т.д. Вот маленький пример.

<?php
   if ($value==$pass)
       include "login.php";
   else 
       include "fail.php";
?>

Содержимое файлов, ссылки на которые описаны с использованием инструкции require будут вставлены независимо ни от каких условий ровно в те места, где они размещены.

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

<?php
  for ($i=0; $i<3;$i++)
       include_once "a.php";
?>

А в следующем примере ссылка будет разрешена два раза, поскольку инструкции обрабатываются последовательно, и вторая команда require также добавит содержимое a.php к разметке формируемой страницы.

<?php
   require "a.php";
   require "a.php";
   require_once "a.php";
?>

Переменные и функции

PHP – это язык программирования с динамической типизацией (поздним связыванием), а значит, как и в случае с JavaScript, тип переменной не указывается явно, а определяется в момент присвоения ей значения. Имена переменных, как видно из ранее приведенных примеров, в PHP начинаются с символа $. Определение функции в PHP ничем особым от других процедурных языков не отличается: имя, список аргументов, тело функции и инструкция return для возврата результата.

<?php
function name($arg1, $arg2, …)
{
 тело функции
 return return_value;
}  
?>

Все переменные, описанные во всех подключенных php файлах и находящихся вне каких либо функций, являются глобальными, а значит, доступны из любого места php скрипта. Любая переменная, описанная в контексте функции, является локальной по отношению к ней. Иногда не все параметры, необходимые для работы функции, в силу различных обстоятельств, определяют в качестве ее аргументов. Такие параметры могут являть собой общие настройки приложения и быть определены через глобальные переменные. Чтобы обратиться из функции к значению любой глобальной переменной, достаточно определить на нее ссылку с использованием ключевого слова global. Вот небольшой пример всему вышесказанному:

<?php
    //Определение глобальных переменных
    $k=1;
    $b=5;
    
    //y(x)=|kx+b|
    function y($x)
    {
     //Обращение к глобальным переменным
     global $k;
     global $b;

     //Определение локальной переменной
     $y=$k*$x+$b;     
     
     if ($y<0)
        return -$y;

     return $y;
    }
    
    //Вызов функции
    echo y(10), "<br/>"; 
    echo y(-10), "<br/>"; 
?>

Таким образом, если внутри функции определить локальную переменную (без ключевого слова global) с именем, совпадающим с именем любой глобальной переменной, то значению последней ничего не грозит. Следует понимать, что в любом месте кода текущего php файла вам доступны все глобальные переменные и все функции, которые представлены во всех файлах, подключенных через инструкцию require, и во всех тех файлах, которые подключены через инструкцию include до этого самого места, поскольку последующие include могут быть еще не обработаны интерпретатором.

Операторы PHP

Синтаксис PHP практически во всем заимствует синтаксические конструкции C/C++, C#, Java и других "C-образных" языков программирования. Тем, кто знаком хотя бы с одним из них, все базовые конструкции PHP не вызовут никаких вопросов. Тем, кто видит подобный синтаксис впервые или не знаком с программированием вообще, прошу пройти по ссылкам ниже и более подробно про все это прочитать. Итак, вот те самые основные операторы или команды препроцессора гипертекста (в квадратных скобках необязательные части конструкций).

Условный оператор IF

if (выражение)
    оператор “если истина”
[elseif (альтернативное выражение 1)
         оператор “альтернативный условие 1”]
…
[elseif (альтернативное выражение n)
         оператор “альтернативный условие n”]
[else оператор “иначе”]

Стоит отметить, что логические выражения в PHP имеют практически такой же синтаксис, что и в перечисленных мною в начале этого раздела языках. Разница только в том, что переменные начинаются с символа $. Итак, в логических выражениях поддерживаются следующие операторы сравнения: равенство ==, строго меньше и строго больше <, >; нестрогие варианты <=, >=; и неравенство != или <>. Логические операторы обозначаются следующим образом: “И” and или &&; “ИЛИ” or или ||. Есть и некоторые другие. Пример if был приведен в первом разделе. Более подробно про условный оператор читаем здесь.

Краткий условный или тернарный оператор

Ниже приведен общий вид условного оператора присваивания с использованием тернарного оператора:
$результат = условие ? выражение если true : выражение если false;

Пример:
$result = ($a>5) ? $a+$b : $a-$b;

Если a больше 5, то переменной result присваивается значение a+b, иначе a-b.

Оператор выбора SWITCH

Альтернатива оператора if с большим количеством конструкций elseif. Выполнение операторов начинается с той секции case, со значением которой совпадет значение выражения и продолжается по всем последующим case, пока не встретится команда break - завершить выполнение. Секция default – альтернатива секции else в условном операторе.

switch (выражение)
{
 case значение 1: оператор 1; [break;]
 case значение 2: оператор 2; [break;]
 case значение 3: оператор 3; [break;]
 default : оператор, выполняемый “по-умолчанию”; [break;]
}

Более подробно про оператор выбора читаем здесь.

Цикл перебора FOR

for (начальное выражение; конечное выражение; приращение)
     тело цикла;

Пример с циклом for найдете выше. Более подробно про цикл for читаем здесь.

Цикл с предусловием WHILE

while (условие) 
       тело цикла;

Пример делает то же самое, что и самый первый пример с циклом for:

$i=2; $f=1;
while ($i<10) 
 {
  $f=$f*$i;
  $i++;
  echo $i,"!=",$f,"<br/>";
 }

Более подробно про цикл while читаем здесь.

Цикл с постусловием DO ... WHILE

При таком подходе тело цикла выполняется минимум один раз независимо от условия.

do 
  тело цикла;
while (условие);

Пример тот же:

$i=2; $f=1;
do
 { 
  $f=$f*$i;
  $i++;
  echo $i,"!=",$f,"<br/>";
 }
 while ($i<10);

Более подробно про цикл do ... while читаем здесь.

Перебор элементов в массиве или оператор foreach

Про массивы еще будет сказано несколько слов отдельно, а ниже конструкция для перебора его элементов в цикле:

foreach (массив as $элемент) 
         выражение, где что-то делаем с переменной $элемент;

Пример:

$values = array("for", "while", "do", "foreach");
echo "Циклы в php:","<br/>";
foreach ($values as $operator)
         echo $operator, "<br/>";

Операторы BREAK и CONTINUE

Циклы и оператор выбора в PHP, также, как и во многих других языках программирования поддерживают инструкции break – досрочного завершения цикла и continue – досрочного завершения текущей итерации цикла (переход к началу цикла). Более подробно про них читайте здесь.

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

Комментарии

Комментарии в PHP добавляются точно так же, как в C# или С++. Для создания комментариев от текущего места и до конца строки достаточно добавить две косых черты:
//Комментарий до конца строки

Для выделения многострочных комментариев следует использовать сочетания /* и */:

/*Этот комментарий занимает несколько строк.
  Такой вид комментариев удобен для отключения части программного
  кода или для вставки развернутого описания работы программы*/

Массивы

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

$symbols = array("a","c","g","b","d");

или

$symbols[]="a"; $symbols[]="c"; $symbols[]="g";…

Обращение к элементу массивы выполняется указанием его индекса в квадратных скобках, например для вывода значения echo $symbols[2]; или для изменения значения $symbols[2]=”h”; В приведенных выше примерах индексы элементов массива определяются автоматически и начинаются с 0. Индексы массива можно также задать самостоятельно, и они могут быть не только целочисленными, но и строковыми:

//Кодировка символов ASCII
$codes["a"]=97;
$codes["c"]=99;
$codes["g"]=103;

Для удаления элемента из массива в PHP следует использовать специальную функцию unset, например unset ($symbols[“c”]);

Многомерные массивы в PHP также поддерживаются, а обращение к элементу многомерного массива – это последовательное указание индексов по всем измерениями, каждое измерение указывается в отдельных квадратных скобках, например $cell[0][5][2]=”0-5-2”; Интерпретатор PHP предоставляет большое количество встроенных функций для работы с массивами, которые позволяют разбивать, объединять, сортировать массивы, осуществлять в них поиск элементов и еще делать многое другое. В этом обзоре у меня нет целей описать все и вся, что касается программирования на PHP, поэтому подробное описание всех возможностей этого языка ищите на других сайтах, а я лишь приведу небольшой пример работы с массивами:

<?php
    //Определение массива 
    $words = array("массив", "цикл", "условие", "переменная", "комментарий");
    //Сортировка элементов массива по алфавиту
    sort($words);
    //Удаление последнего элемента
    unset($words[count($words)-1]);
    //Вывод отсортированного массива без последнего элемента
    foreach ($words as $word)
             echo $word, "<br/>";     
?>

Строки

PHP также поддерживает большое количество операций, связанных с обработкой строк. Для объединения (конкатенации) нескольких строк в одну следует использовать символ ".". Для преобразование любых других типов в строку и наоборот следует использовать оператор преобразования типов, например $s=(string)3.1415; или $f=(float)”3.1415”; Подробного описания всех функций работы со строками в этом обзоре вы также не найдете, поскольку все это займет довольно много места, а создавать подробный справочник в мои планы не входило. Вот небольшой пример:

<?php
   //Объявление строки
   $s1="abcdef";
   //Объединение двух строк
   $s2=$s1."ghi";
   //Сравнение двух строк 
   if (strcmp($s2, "abcdefghi")==0)
       echo "строка s2 равна 'abcdefghi'","<br/>";
   //Преобразование строки в верхний регистр
   echo "Преобразование s1 в верхний регистр: ", strtoupper($s1),"<br/>";
   //Значение длины строки
   echo "Длина строки s1 = ", strlen($s2),"<br/>";
   //Преобразование целочисленного типа к строке;
   $s3="длина s1=".(string)strlen($s1)."; длина s2=".(string)strlen($s2);
   echo $s3,"<br/>";
   //Перевод строки в числовой формат
   echo "14.8 - 7.1 = ",(string)((float)"14.8" - (float)"7.1");     
?>

Передача аргументов по ссылке

В PHP, также как и во многих других языках программирования аргументы функции можно передавать по ссылке. Таким образом, в теле функции вы будете иметь дело не с копией переданной в качестве аргумента переменной, а с самой этой переменной. Т.е. если внутри функции значение аргумента изменяется, то изменяется и значение самой переменной, переданной по ссылке. Для обозначения того, что аргумент передается по ссылке в PHP используется символ &. Передача параметров по ссылке на примере функции-инкремента продемонстрирована ниже:

<?php
    function inc(&$x) {$x=$x+1;}
    $x=1;
    inc($x);
    //Будет выведено значение 2
    echo($x);     
?>

Альтернативное обращение к значению переменной

Оказывается, что в PHP к значению переменной можно обратиться не только через ее непосредственное обозначение в программе, но и через другую переменную, если значение последней будет содержать имя запрашиваемой переменной. На следующем примере, пожалуй, становится понятно, зачем разработчикам php понадобился символ $ - он символизирует обращение к значению переменной, идентификатор которой располагается непосредственно после него, будь то лексема или любая адресуемая область памяти. Для обращения к значению переменной по значению другой переменной потребуется уже два символа $ подряд. Пример:

<?php
   //Определение обычной текстовой переменной
   $a="переменная a";
   //Переменная ref_a содержит имя переменной
   $ref_a="a";
   //Ссылка на значение переменной 'a' с помощью значения переменной 'ref_a'
   echo $a,"=",$$ref_a, "<br/>"; 
?>

Читать далее: обработка параметризованных HTTP запросов на PHP.



Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.