PHP: различия между версиями

Содержимое удалено Содержимое добавлено
→‎strpos(): ошибка в примере
м Синтаксис, викификация.
Строка 1:
{{wikipedia}}
'''PHP''' (произносится ''пи-эйч-пи́'') — [[w:скриптовый язык|скриптовый язык]] программирования, созданный для генерации [[w:HTML|HTML]]-страниц на [[w:веб-сервер|веб-сервере]] и работы с [[w:база данных|базами данных]]. На сегодняшний момент поддерживается подавляющим большинством представителей [[w:хостинг|хостингов]]. Входит в [[w:LAMP| «LAMP]»] — «стандартный» набор для создания [[w:сайт|веб-сайтов]].
 
== Комментарии ==
'''PHP''' предоставляет несколько методов для вставки комментариев. Проще всего пользоваться двойной косой чертой (//), после чего '''PHP '''-машина игнорирует всё, что расположено до конца строки. Также можно пользоваться многострочными комментариями в стиле "C" / [[C++|"С++"]] (/*…*/). Для однострочных комментариев можно ещеещё пользоваться символом решеткирешётки (#) (комментарий сценарных языков операционной системы [[UNIX|"UNIX"]]).
 
<source lang="php">
<?php
print '<p>Hello</p>'; // Комментарий
print '<p>Hello</p>'; # Комментарий
/* Комментарий
... и это тоже комментарии
*/
 
// Комментарии очень удобны в тех случаях,
// когда необходимо исключить часть кода
// для отладки программы,; например:
 
$uname = $_POST['uname'];
 
// $uname = preg_replace('#[^a-zA-Z0-9\_\-\.]#', '', $uname);
// Закомментировали часть кода,
// так как не выводится желаемогожелаемый результата,результат;
// возможно, дело в этой строке:
echo $uname;
 
# Изначально, комментарии создавались для того,
// чтобы, не нарушая работы программы,
// добавить описание к той или иной строке,;
// например:
 
echo getUsersOnline(2, 1, 4);
/* Аргументы функции:
0 - номер открытого соединения с базой данных;
1 - режим ответа ("0" - массив / "1" - строка);
2 - кол-во минут, прошедших с момента
последней активности пользователя (необязательный)
*/
?>
</source>
 
Следует помнить о том, что стили комментариев '''PHP''' действуют только внутри ограничителей '''PHP'''. Если '''PHP''' встретит эти символы комментариев вне ограничителей, то они, как и любой текст, будут помещены на HTML-страницу. Например:
 
<source lang="php">
Строка 40 ⟶ 48 :
</source>
<source lang="html5">
// А вот этот комментарий отобразится браузером.
<!-- Комментарий HTML. Будет виден в исходном коде HTML, но не в браузере . -->
</source>
 
== Переменные ==
В '''РНР''' — переменные начинаются со знака доллара ($). За этим знаком может следовать любое количество буквенно-цифровых символов и символов подчеркиванияподчёркивания, но первый символ не может быть цифрой. Следует также помнить, что имена переменных в '''РНР''' чувствительны к регистру, в отличие от ключевых слов.
 
При объявлении переменных в '''РНР''' не требуется явно указывать тип переменной,; при этом, одна и та же переменная может иметь, на протяжении программы, разные типы.
 
Переменная инициализируется в момент присваиванияприсвоения ей значения и существует до тех пор, пока выполняется программа (в случае ''web''-страницы — до тех пор, пока не завершензавершён запрос), или она не будет удалена функцией <code>unset()</code>.
 
=== Функции вывода ===
В '''PHP''' существует несколько способов вывести что-либо в веб -страницу:
*Операторы <code>echo</code> и <code>print</code>
*:Работают одним и тем же образом, но '''print''' всегда возвращает "1", в то время как '''echo''' ничего не возвращает. Выводят значение аргумента.
*Функция <code>print_r()</code>
*:Позволяет корректно выводить массивы.
*Функция <code>var_dump()</code>
*:Выводит переменную вместе с типом. Очень удобный инструмент для отладки.
 
==== Вывод различных функций ====
Строка 107 ⟶ 115 :
 
=== Типы данных в РНР ===
Как уже было сказано, '''PHP''' предоставляет определеннуюопределённую гибкость в отношении типов переменных, то есть с одной и той же переменной, на протяжении программы, можно работать и как со строкой, и как с числом. Однако, несмотря на это, в '''РНР''' существуют набор основных типов данных, которые могут явно указываться при работе с переменными:
*integer (целые числа);
*string (строки);
*boolean (двоичные данные (или "Истина", или "Ложь"));
*double, если после точки 1 или 2 цифры,; float, если больше (числа с плавающей точкой);
*[[PHP/Массивы|array]] (массивы);
*object (Объектыобъекты);
*NULL (пустой тип);
*Resource (ресурсы);
 
Есть функция <code>gettype()</code>, возвращающая тип, который '''РНР''' назначил переменной:
<source lang="php">
<?php
Строка 126 ⟶ 134 :
</source>
 
В первом случае, '''РНР''' вернетвернёт <code>string</code>,; во втором <code>integer</code>.
 
Стоит заметить, что операция «'''.'''» (точка) используется для склеивания (конкатенации) строк.
 
Существует также функция <code>settype()</code>, которая явно устанавливает тип:
 
<source lang="php">
Строка 141 ⟶ 149 :
</source>
 
Выполнение этого фрагмента кода приведетприведёт к такому же результату, как и предыдущего.
 
Кроме функции <code>settype()</code>, преобразование типов в '''РНР''' можно осуществлять при помощи операторов преобразования типов. Преобразование типов осуществляется путемпутём указания перед переменной еееё нового типа, взятого в скобки:
<source lang="php">
$var = (integer)$var;
</source>
 
Соответственно, выполнение следующего кода приведетприведёт к тому, что '''РНР''' вернетвернёт integer:
<source lang="php">
<?php
$var = '5'; // Изначально, создаётся переменная типа "string" (строковая)
$var = '5'; //Тип string
$var = (integer)$var; // Преобразуем её тип в "int" (целочисленный)
echo gettype($var); // Отображаем окончательный тип переменной
?>
</source>
 
=== Внешние переменные ===
После того, как запрос клиента проанализирован веб-сервером и передан '''РНР'''-интерпретатору, последний устанавливает ряд переменных, которые содержат данные, относящиеся к запросу и доступны всевсё время его выполнения.
 
Сначала '''PHP''' инициализирует массивы <code>$_ENV</code> (переменные окружения) и <code>$_SERVER</code><ref>На самом деле, порядок инициализации суперглобальных массивов зависит от настроек в файле ''php.ini''</ref>. Ассоциативный массив <code>$_SERVER</code> содержит следующие ключи (индексы массива):
*<code>$_SERVER['HTTP_USER_AGENT']</code> — браузер клиента;
*<code>$_SERVER['HTTP_ACCEPT']</code> — принимаемые MIME-типы. Может служить для определения возможностей браузера;
*<code>$_SERVER['PHP_SELF']</code> — путь к файлу, содержащему выполняющийся скрипт, относительно корневого каталога (папки) сервера. Пример: <code>/w/index.php</code>
 
Затем '''РНР''' заполняет переменную <code>$_GET[]</code>, являющуюся ассоциативным массивом, которая создаётся при анализе строки запроса. Строка запроса хранится в элементе массива <code>$_SERVER['QUERY_STRING']</code> и представляет собой информацию, следующую за символом «?» в запрошенном URL. '''РНР''' разбивает строку запроса по символам «&»<ref>Символ разделения также может меняться в файле ''php.ini''. Часто используется символ «;».</ref> на отдельные элементы, а затем ищет в каждом из этих элементов знак «=». Если знак «=» найден, то создаетсясоздаётся переменная с именем из символов, стоящих слева от знака равенства. Рассмотрим следующую форму:
 
<source lang="html5">
Строка 194 ⟶ 202 :
</source>
 
Если Вы в этой форме в строке "HDD" наберетенаберёте, к примеру, ''«Maxtor»'', а в строке "CDROM" ''«Nec»'', то она сгенерирует следующую форму запроса:
 
<code>http://localhost/PHP/test.php?HDD=Maxtor&CDROM=Nec</code>
 
В нашем случае '''РНР''' создаст следующие элементы массива с соответствующими индексами (ключами): <code>$_GET['HDD'] = 'Maxtor'</code> и <code>$_GET['CDROM'] = 'Nec'</code>.
 
Вы можете работать с этими переменными из Вашего скрипта (у нас — "test.php") как с обычными переменными. В нашем случае они просто выводятся на экран:
 
<source lang="php">
Строка 208 ⟶ 217 :
</source>
 
Если запрос страницы выполняется при помощи метода <code>POST</code>, то появляется группа ''POST''-переменных, которые интерпретируются так же и помещаются в массив <code>$_POST[]</code>.
 
== Константы ==
Константы объявляются в '''РНР''' при помощи функции <code>define()</code>:
<source lang="php">
define('CONSTANT', value)
Строка 239 ⟶ 248 :
== Операторы ==
=== Математические операторы ===
В '''PHP''', как и в любом другом языке программирования, есть базовый набор математических операторов:
*'''Унарный минус''' (<code>-</code>) — изменяет знак числа;
*'''Сложение, вычитание, умножение''' (<code>+</code>, <code>-</code>, <code>*</code>) — действуют такжетак же, как и в обычной математике;
*'''Деление''' (<code>/</code>) всегда возвращает вещественное число (т.е. с типом данных <code>float</code>), вне зависимости от результата.;
*'''Деление по модулю''' (<code>%</code>) — возвращает остаток от деления.
 
=== Инкремент и декремент ===
*<code>$a++</code> — возвращаетВозвращают старое значение $a и увеличивает $a на 1. :
**<code>$a++$a</code> — увеличивает $a на 1 и возвращает новое значение $a.;
**<code>$a--</code> — возвращает старое значение $a и уменьшает $a на 1.
*<code>--$a</code> — уменьшает $a на 1 и возвращаетВозвращают новое значение $a.:
**<code>++$a</code> — увеличивает $a на 1;
**<code>--$a</code> — уменьшает $a на 1.
 
=== Операторы сравнения ===
Существуют следующие операторы сравнения:
{|
|'''Оператор'''
| <code>$a == $b</code> («равно»)
|'''Значение'''
| Возвращает <code>true</code>, если $a равно $b
|'''Условие истинности''' (возвращается <code>true</code>).
|-
| <code>$a == $b</code> («равно»)
|Равно
| '''$a''' равно '''$b'''.
|-
| <code>$a === $b</code> («идентично»)
|Идентично
| Возвращает <code>true</code>, если '''$a''' равно '''$b''' и они имеют один и тот же тип.
|-
| <code>$a != $b</code> или <code>$a <> $b</code> («не
|Не равно»)
| Возвращает<code>true</code>, если '''$a''' не равно '''$b'''.
|-
| <code>$a > $b</code>
|Строго больше»)
| Возвращает <code>true</code>, если '''$a''' строго больше '''$b'''.
|-
| <code>$a < $b</code>
|Строго меньше»)
| Возвращает <code>true</code>, если '''$a''' строго меньше '''$b'''.
|-
| <code>$a >= $b</code> («больше или равно»)
| Возвращает <code>true</code> если $a большеБольше или равно $b
| '''$a''' больше или равно '''$b'''.
|-
| <code>$a <= $b</code> («меньше или равно»)
| <code>true</code> если $a меньшеМеньше или равно $b
| '''$a''' меньше или равно '''$b'''.
|}
 
=== Операторы присвоения ===
Для присвоения переменной нового значения используется оператор «<code>=</code>»:
<source lang="php">
$a = $b + $c - 127;
</source>
Также существуют сокращённые операторы присвоения(: <code>+=</code>, <code>-=</code>, <code>.=</code>, <code>/=</code>, <code>*=</code>, <code>%=</code>). Пример:
<source lang="php">
$a = $a + 1;