|
|
| (не показаны 19 промежуточных версий 1 участника) |
| Строка 1: |
Строка 1: |
| | + | == Основы языка== |
| | + | * [[СУБД/лекция 7 семестр 2 (раздел)/Переменные | Переменные ]] |
| | + | * [[СУБД/лекция 7 семестр 2 (раздел)/Управляющие конструкции | Управляющие конструкции ]] |
| | + | * [[СУБД/лекция 7 семестр 2 (раздел)/Строковые функции PHP | Строковые функции PHP ]] |
| | + | * [[СУБД/лекция 7 семестр 2 (раздел)/Функции PHP для работы с массивами | Функции PHP для работы с массивами ]] |
| | + | * [[СУБД/лекция 7 семестр 2 (раздел)/Работа с сетью | Работа с сетью ]] |
| | + | * [[СУБД/лекция 7 семестр 2 (раздел)/Функции для работы с датой и временем| Функции для работы с датой и временем ]] |
| | + | * [http://www.php.su/lessons/ Уроки по работе с PHP] |
| | + | |
| | + | [http://www.mirsite.ru/phpbooks.htm Список литературы] |
| | + | [http://www.mirsite.ru/php.htm Литература 1] |
| | + | [http://www.php.su/learnphp/cs/ Литература 2] |
| | + | |
| | ==Что нужно для работы с php== | | ==Что нужно для работы с php== |
| | * Нужен сервер выполняющий скрипты | | * Нужен сервер выполняющий скрипты |
| Строка 5: |
Строка 18: |
| | ** Интернет сервер | | ** Интернет сервер |
| | * Пишем код, закачиваем на сервер, просматриваем результат выполнения в браузере. | | * Пишем код, закачиваем на сервер, просматриваем результат выполнения в браузере. |
| − | * Документация по синтаксису и возможностям языка | + | * Документация по синтаксису и возможностям языка |
| − | [http://www.mirsite.ru/php.htm 1 sourse]
| + | |
| | | | |
| | == Устанавливаем локальный сервер == | | == Устанавливаем локальный сервер == |
| Строка 46: |
Строка 58: |
| | * Видим результат выполнения скрипта | | * Видим результат выполнения скрипта |
| | Hello Viktor! | | Hello Viktor! |
| − | == Основы ==
| |
| − | ===Управляющие конструкции ===
| |
| − | [http://www.php.su/learnphp/cs/ source 1]
| |
| − |
| |
| − | Любой сценарий PHP сформирован из ряда конструкций. Конструкцией могут быть операторы, функции, циклы, условные операторы, даже конструкции, которые не делают ничего (пустые конструкции). Конструкции обычно заканчиваются точкой с запятой. Кроме того, конструкции могут быть сгруппированы в группу, формируя группу конструкций с изогнутыми фигурными скобками {...}. Группа конструкций - это также отдельная конструкция. Конструкции языка PHP похожи на конструкции языка Си.
| |
| − |
| |
| − | В PHP существуют шесть основных групп управляющих конструкций. Итак, основные группы управляющих конструкций PHP и их состав:
| |
| − |
| |
| − | * Условные операторы:
| |
| − | ** '''if'''
| |
| − | ** '''else'''
| |
| − | ** '''elseif'''
| |
| − | * Циклы:
| |
| − | ** '''while'''
| |
| − | ** '''do-while'''
| |
| − | ** '''for'''
| |
| − | ** '''foreach'''
| |
| − | ** '''break'''
| |
| − | ** '''continue'''
| |
| − | * Конструкции выбора:
| |
| − | ** '''switch-case'''
| |
| − | * Конструкции объявления:
| |
| − | ** '''declare'''
| |
| − | * Конструкции возврата значений:
| |
| − | ** '''return'''
| |
| − | * Конструкции включений:
| |
| − | ** '''require()'''
| |
| − | ** '''include()'''
| |
| − | ** '''require_once()'''
| |
| − | ** '''include_once()'''
| |
| − | * Альтернативный синтаксис конструкций PHP
| |
| − | === Условные операторы PHP ===
| |
| − | Условные операторы являются, пожалуй, наиболее распространенными конструкциями во всех алгоритмических языках программирования. Рассмотрим основные условные операторы языка PHP.
| |
| − |
| |
| − | '''Конструкция if'''
| |
| − |
| |
| − | Синтаксис конструкции if аналогичен конструкции if в языке Си:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | if (логическое выражение) оператор;
| |
| − | ?></source>
| |
| − |
| |
| − | Согласно выражениям PHP, конструкция if содержит логическое выражение. Если логическое выражение истинно (true), то оператор, следующий за конструкцией if будет исполнен, а если логическое выражение ложно (false), то следующий за if оператор исполнен не будет. Приведем примеры:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | if ($a > $b) echo "значение a больше, чем b";
| |
| − | ?></source>
| |
| − |
| |
| − | В следующем примере если переменная $a не равна нулю, будет выведена строка "значение a истинно (true)":
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | if ($a) echo "значение a истинно (true) ";
| |
| − | ?></source>
| |
| − |
| |
| − | В следующем примере если переменная $a равна нулю, будет выведена строка "значение a ложно (false)":
| |
| − | <source lang="php">
| |
| − | <?php
| |
| − | if (!$a) echo "значение a ложно (false) ";
| |
| − | ?>
| |
| − | </source>
| |
| − | Часто вам будет необходим блок операторов, который будет выполняться при определенном условном критерии, тогда эти операторы необходимо поместить в фигурные скобки {...} Пример:
| |
| − | <source lang="php">
| |
| − | <?php
| |
| − | if ($a > $b) {
| |
| − | echo "a больше b";
| |
| − | $b = $a;
| |
| − | }
| |
| − | ?>
| |
| − | </source>
| |
| − | Приведенный пример выведет сообщение, "a больше b", если $a > $b, а затем переменная $a будет приравнена к переменной $b. Заметим, что данные операторы выполняются в теле конструкции if.
| |
| − |
| |
| − | '''Конструкция else'''
| |
| − |
| |
| − | Часто возникает потребность исполнения операторов не только в теле конструкции if, если выполнено какое-либо условие конструкции if, но и в случае, если условие конструкции if не выполнено. В данной ситуации нельзя обойтись без конструкции else. В целом, такая конструкция будет называться конструкцией if-else.
| |
| − |
| |
| − | Синтаксис конструкции if-else такой:
| |
| − |
| |
| − | if (логическое_выражение)
| |
| − | инструкция_1;
| |
| − | else
| |
| − | инструкция_2;
| |
| − |
| |
| − | Действие конструкции if-else следующее: если логическое_выражение истинно, то выполняется
| |
| − | инструкция_1, а иначе — инструкция_2. Как и в любом другом языке, конструкция else может опускаться, в этом случае при получении должного значения просто ничего не делается.
| |
| − |
| |
| − | Если инструкция_1 или инструкция_2 должны состоять из нескольких команд, то они, как всегда, заключаются в фигурные скобки. Например:
| |
| − | <source lang="php">
| |
| − | <?php
| |
| − | if ($a > $b) {
| |
| − | echo "a больше, чем b";
| |
| − | } else {
| |
| − | echo "a НЕ больше, чем b";
| |
| − | }
| |
| − | ?></source>
| |
| − |
| |
| − | '''Конструкция if-else имеет еще один альтернативный синтаксис:'''
| |
| − |
| |
| − | if (логическое_выражение):
| |
| − | команды;
| |
| − | elseif(другое_логическое_выражение):
| |
| − | другие_команды;
| |
| − | else:
| |
| − | иначе_команды;
| |
| − | endif
| |
| − |
| |
| − | Обратите внимание на расположение двоеточия (:)! Если его пропустить, будет сгенерировано сообщение об ошибке. И еще: как обычно, блоки elseif и else можно опускать.
| |
| − |
| |
| − | '''Конструкция elseif'''
| |
| − |
| |
| − | elseif - это комбинация конструкций if и else. Эта конструкция расширяет условную конструкцию if-else.
| |
| − |
| |
| − | Приведем синтаксис конструкции elseif:
| |
| − |
| |
| − | if (логическое_выражение_1)
| |
| − | оператор_1;
| |
| − | elseif (логическое_выражение_2)
| |
| − | оператор_2;
| |
| − | else
| |
| − | оператор_3;
| |
| − |
| |
| − | Практический пример использования конструкции elseif:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | if ($a > $b) {
| |
| − | echo "a больше, чем b";
| |
| − | } elseif ($a == $b) {
| |
| − | echo "a равен b";
| |
| − | } else {
| |
| − | echo "a меньше, чем b";
| |
| − | }
| |
| − | ?></source>
| |
| − |
| |
| − | {{X|24px}}Вообще, конструкция elseif не очень удобна, поэтому применяется не так часто.
| |
| − |
| |
| − |
| |
| − | === Циклы: ===
| |
| − |
| |
| − | На втором месте по частоте использования, после конструкций условий (условных операторов), находятся циклы.
| |
| − |
| |
| − | Циклы позволяют повторять определенное (и даже неопределенное - когда работа цикла зависит от условия) колличество раз различные операторы. Данные операторы называются телом цикла. Проход цикла называется итерацией.
| |
| − |
| |
| − | PHP поддерживает три вида циклов:
| |
| − | # Цикл с предусловием (while);
| |
| − | # Цикл с постусловием (do-while);
| |
| − | # Цикл со счетчиком (for);
| |
| − | # Специальный цикл перебора массивов (foreach).
| |
| − |
| |
| − | При использовании циклов есть возможность использования операторов break и continue. Первый из них прерывает работу всего цикла, а второй - только текущей итерации.
| |
| − |
| |
| − | Рассмотрим циклы PHP:
| |
| − |
| |
| − | '''Цикл с предусловием while'''
| |
| − |
| |
| − | Цикл с предусловием while работает по следующим принципам:
| |
| − | * Вычисляется значение логического выражения.
| |
| − | * Если значение истинно, выполняется тело цикла, в противном случае - переходим на следующий за циклом оператор.
| |
| − |
| |
| − | ''''''Синтаксис цикла с предусловием:''''''
| |
| − |
| |
| − | while (логическое_выражение)
| |
| − | инструкция;
| |
| − |
| |
| − | В данном случае телом цикла является инструкция. Обычно тело цикла состоит из большого числа операторов. Приведем пример цикла с предусловием while:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | $x=0;
| |
| − | while ($x++<10) echo $x;
| |
| − | // Выводит 12345678910
| |
| − | ?></source>
| |
| − |
| |
| − | Обратите внимание на последовательность выполнения операций условия $x++<10. Сначала проверяется условие, а только потом увеличивается значение переменной. Если мы поставим операцию инкремента перед переменной (++$x<10), то сначала будет выполнено увеличение переменной, а только затем - сравнение. В результате мы получим строку 123456789. Этот же цикл можно было бы записать по-другому:
| |
| − | <source lang="php">
| |
| − | <?php
| |
| − | $x=0;
| |
| − | while ($x<10)
| |
| − | {
| |
| − | $x++; // Увеличение счетчика
| |
| − | echo $x;
| |
| − | }
| |
| − | // Выводит 12345678910
| |
| − | ?></source>
| |
| − |
| |
| − | Если мы увеличим счетчик после выполнения оператора echo, мы получим строку 0123456789. В любом случае, мы имеем 10 итераций. Итерация - это выполение операторов внутри тела цикла.
| |
| − |
| |
| − | Подобно конструкции условного оператора if, можно группировать операторы внутри тела цикла while, используя следующий альтернативный синтаксис:
| |
| − |
| |
| − | while (логическое_выражение):
| |
| − | инструкция;
| |
| − | ...
| |
| − | endwhile;
| |
| − |
| |
| − | Пример использования альтернативного синтаксиса:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | $x = 1;
| |
| − | while ($x <= 10):
| |
| − | echo $x;
| |
| − | $x++;
| |
| − | endwhile;
| |
| − | ?></source>
| |
| − |
| |
| − | '''Цикл с постусловием do while'''
| |
| − |
| |
| − | В отличие от цикла while, этот цикл проверяет значение выражения не до, а после каждого прохода (итерации). Таким образом, тело цикла выполняется хотя бы один раз. Синтаксис цикла с постусловием такой:
| |
| − |
| |
| − | do
| |
| − | {
| |
| − | тело_цикла;
| |
| − | }
| |
| − | while (логическое_выражение);
| |
| − |
| |
| − | После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается.
| |
| − | Альтернативного синтаксиса для do-while разработчики PHP не предусмотрели (видимо, из-за того, что, в отличие от прикладного программирования, этот цикл довольно редко используется при программировании web-приложений).
| |
| − |
| |
| − | Пример скрипта, показывающего работу цикла с постусловием do-while:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | $x = 1;
| |
| − | do {
| |
| − | echo $x;
| |
| − | } while ($x++<10);
| |
| − | ?></source>
| |
| − |
| |
| − | Рассмотренный сценарий выводит: 12345678910
| |
| − |
| |
| − | '''Цикл со счетчиком for'''
| |
| − |
| |
| − | Цикл со счетчиком используется для выполнения тела цикла определенное число раз. С помощью цикла for можно (и нужно) создавать конструкции, которые будут выполнять действия совсем не такие тривиальные, как простая переборка значения счетчика.
| |
| − |
| |
| − | Синтаксис цикла for такой:
| |
| − |
| |
| − | for (инициализирующие_команды; условие_цикла; команды_после_итерации) { тело_цикла; }
| |
| − |
| |
| − | Цикл for начинает свою работу с выполнения инициализирующих_команд. Данные команды выполняются только один раз. После этого проверяется условие_цикла, если оно истинно (true), то выполняется тело_цикла. После того, как будет выполнен последний оператор тела, выполняются команды_после_итерации. Затем снова проверяется условие_цикла. Если оно истинно (true), выполняется тело_цикла и команды_после_итерации, и.т.д.
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | for ($x=0; $x<10; $x++) echo $x;
| |
| − | ?></source>
| |
| − |
| |
| − | Данный сценарий выводит: 0123456789
| |
| − |
| |
| − | Есть вариант вывода строки 12345678910:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | for ($x=0; $x++<10;) echo $x;
| |
| − | // Выводит 12345678910
| |
| − | ?></source>
| |
| − |
| |
| − | В данном примере мы обеспечили увеличение счетчика при проверке логического выражения. В таком случае нам не нужны были команды, выполняющиеся после итерации.
| |
| − |
| |
| − | Если необходимо указать несколько команд, их можно разделить запятыми, пример:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | for ($x=0, $y=0; $x<10; $x++, $y++) echo $x;
| |
| − | // Выводит 0123456789
| |
| − | ?></source>
| |
| − |
| |
| − | Приведем еще один, более практичный пример использования нескольких команд в цикле for:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | for($i=0,$j=0,$k="Точки"; $i<10; $j++,$i+=$j) { $k=$k."."; echo $k; }
| |
| − | // Выводит Точки.Точки..Точки...Точки....
| |
| − | ?></source>
| |
| − |
| |
| − | Рассмотренный пример (да и вообще любой цикл for) можно реализовать и через while, только это будет выглядеть не так изящно и лаконично.
| |
| − |
| |
| − | Для цикла for имеется и альтернативный синтаксис:
| |
| − |
| |
| − | for(инициализирующие_команды; условие_цикла; команды_после_итерации):
| |
| − | операторы;
| |
| − | endfor;
| |
| − |
| |
| − | '''Цикл перебора массивов foreach'''
| |
| − |
| |
| − | В PHP4 появился еще один специальный тип цикла - foreach. Данный цикл предназначен специально для перебора массивов.
| |
| − |
| |
| − | Синтаксис цикла foreach выглядит следующим образом:
| |
| − |
| |
| − | foreach (массив as $ключ=>$значение)
| |
| − | команды;
| |
| − |
| |
| − | Здесь команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=>значение оказывается в переменных $ключ и $значение. Приведем пример работы цикла foreach:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | $names["Иванов"] = "Андрей";
| |
| − | $names["Петров"] = "Борис";
| |
| − | $names["Волков"] = "Сергей";
| |
| − | $names["Макаров"] = "Федор";
| |
| − | foreach ($names as $key => $value) {
| |
| − | echo "<b>$value $key</b><br>";
| |
| − | }
| |
| − | ?></source>
| |
| − |
| |
| − | Рассмотренный сценарий выводит:
| |
| − |
| |
| − | Андрей Иванов
| |
| − | Борис Петров
| |
| − | Сергей Волков
| |
| − | Федор Макаров
| |
| − |
| |
| − | У цикла foreach имеется и другая форма записи, которую следует применять, когда нас не интересует значение ключа очередного элемента. Выглядит она так:
| |
| − |
| |
| − | foreach (массив as $значение)
| |
| − | команды;
| |
| − |
| |
| − | В этом случае доступно лишь значение очередного элемента массива, но не его ключ. Это может быть полезно, например, для работы с массивами-списками:
| |
| − | <source lang="php">
| |
| − | <?php
| |
| − | $names[] = "Андрей";
| |
| − | $names[] = "Борис";
| |
| − | $names[] = "Сергей";
| |
| − | $names[] = "Федор";
| |
| − | foreach ($names as $value) {
| |
| − | echo "<b>$value</b><br>";
| |
| − | }
| |
| − | ?></source>
| |
| − |
| |
| − | {{ЖЛампа|24px}}'''Внимание:''' Цикл foreach оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть "видны" из тела цикла. Что позволяет, например, в качестве массива использовать не только переменную, но и результат работы какой-нибудь функции, возвращающей массив (в этом случае функция будет вызвана всего один раз - до начала цикла, а затем работа будет производиться с копией возвращенного значения).
| |
| − |
| |
| − | '''Конструкция break'''
| |
| − |
| |
| − | Очень часто для того, чтобы упростить логику какого-нибудь сложного цикла, удобно иметь возможность его прервать в ходе очередной итерации (к примеру, при выполнении какого-нибудь особенного условия). Для этого и существует конструкция break, которая осуществляет немедленный выход из цикла. Она может задаваться с одним необязательным параметром - числом, которое указывает, из какого вложенного цикла должен быть произведен выход. По умолчанию используется 1, т. е. выход из текущего цикла, но иногда применяются и другие значения. Синтаксис конструкции break:
| |
| − |
| |
| − | break; // По умолчанию
| |
| − | break(номер_цикла); // Для вложенных циклов (указывается номер прерываемого цикла)
| |
| − |
| |
| − | Приведем примеры:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | $x=0;
| |
| − | while ($x++<10) {
| |
| − | if ($x==3) break;
| |
| − | echo "<b>Итерация $x</b><br>";
| |
| − | }
| |
| − | // Когда $x равен 3, цикл прерывается
| |
| − | ?></source>
| |
| − |
| |
| − | Рассмотренный сценарий выводит:
| |
| − |
| |
| − | Итерация 1
| |
| − | Итерация 2
| |
| − |
| |
| − | Если нам нужно прервать работу определенного (вложенного) цикла, то нужно передать конструкции break параметр - номер_цикла, например, break(1). Нумерация циклов выглядит следующим образом:
| |
| − |
| |
| − | for (...) // Третий цикл
| |
| − | {
| |
| − | for (...) // Второй цикл
| |
| − | {
| |
| − | for (...) // Первый цикл
| |
| − | {
| |
| − | }
| |
| − | }
| |
| − | }
| |
| − |
| |
| − | '''Конструкция continue'''
| |
| − |
| |
| − | Конструкция continue так же, как и break, работает только "в паре" с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой (конечно, если выполняется условие цикла для цикла с предусловием). Точно так же, как и для break, для continue можно указать уровень вложенности цикла, который будет продолжен по возврату управления.
| |
| − |
| |
| − | В основном continue позволяет вам сэкономить количество фигурных скобок в коде и увеличить его удобочитаемость. Это чаще всего бывает нужно в циклах-фильтрах, когда требуется перебрать некоторое количество объектов и выбрать из них только те, которые удовлетворяют определенным условиям. Приведем пример использования конструкции continue:
| |
| − |
| |
| − | <source lang="php"><?php
| |
| − | $x=0;
| |
| − | while ($x++<5) {
| |
| − | if ($x==3) continue;
| |
| − | echo "<b>Итерация $x</b><br>";
| |
| − | }
| |
| − | // Цикл прервется только на третьей итерации
| |
| − | ?></source>
| |
| − |
| |
| − | Рассмотренный скрипт выводит:
| |
| − |
| |
| − | Итерация 1
| |
| − | Итерация 2
| |
| − | Итерация 4
| |
| − | Итерация 5
| |
| − |
| |
| − | Грамотное использование '''break''' и '''continue''' позволяет заметно улучшить "читабельность" кода и количество блоков else.
| |
| − |
| |
| − | === Конструкции выбора: ===
| |
| − | » switch-case
| |
| − |
| |
| − |
| |
| − | === Конструкции объявлений: ===
| |
| − | » declare
| |
| − |
| |
| − |
| |
| − | === Конструкции возврата значений: ===
| |
| − | » return
| |
| − |
| |
| − |
| |
| − | === Конструкции включений: ===
| |
| − | » require
| |
| − | » include
| |
| − | » require_once
| |
| − | » include_once
| |
| − |
| |
| − |
| |
| − | === Дополнительно: ===
| |
| − | » Альтернативный синтаксис конструкций PHP
| |