Найдя ошибку - выделите ее и нажмите Ctrl+Enter

Знакомство с языком PHP

18 ноября 2009 г.

PHP – язык серверный. Поэтому очень часто говорят, что необходим сервер для его изучения. Это действительно так. Однако, существуют сервисы, которые избавят вас от необходимости иметь сервер и позволят вам приступить к изучению PHP немедленно.

Один из таких сервисов – PHP Sandbox. Все примеры, приведённые на этой странице, можно скопировать в PHP Sandbox и сразу увидеть результат их выполнения. Это очень удобно, если вы только начали изучение РНР и сервера у вас пока нет.

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

<?php

Поскольку PHP-команды могут быть частью скрипта (программы), написанной на другом языке, а также включать в себя фрагменты другого кода, важно указывать не только начало PHP-кода, но и его конец:

<?php ?>

В конце PHP-команды (выражения) всегда должна стоять точка с запятой (;)

<?php
echo "Hello World!" ;

Полностью PHP-код или его фрагмент оформляется следующим образом:

<?php

echo "Hello World!" ;

?>

Если ваш скрипт (файл с кодом) содержит только PHP-код, закрывать (?>) его необязательно. Но открывающая часть должна присутствовать всегда! Поэтому если будете пользоваться вышеуказанным сервисом PHP Sandbox, не забывайте указывать в первой строке <?php

PHP Sandbox


Вторым обязательным условием для выполнения вашего PHP-кода является расширение файла со скриптом. Оно должно быть .php – index.php, script.php и т.п..

Теперь пару слов о том, когда и как PHP-код может соседствовать с кодом, написанным на другом языке программирования. Все языки программирования можно разделить на две категории: клиентские и серверные.

Ваш компьютер, отображающий сейчас эту страницу, – клиент или клиентская машина. Компьютер, который вам эту страницу прислал – сервер. Когда вы набираете в адресной строке yandex.ru, вы делаете запрос к серверу, который по этому адресу находится и он выполняет действия по вашему запросу – формирует страницу и передаёт её в ваш браузер.

Самый часто используемый при создании сайтов серверный язык – PHP, самый известный клиентский – HTML. HTML обрабатывается вашим браузером (обозревателем), PHP – сервером. Упрощённо это выглядит так:

схема обработки запроса сервером

Поскольку HTML – язык клиентский, html-код любой страницы можно запросто посмотреть на клиенте:

просмотр html-кода страницы

PHP - язык серверный. Клиент получает результат выполнения php-скрипта по запросу. Т.е. нельзя посмотреть или изменить сам php-скрипт. Работать php-скрипт будет только на сервере. Поэтому для изучения PHP нужно этот самый сервер иметь (или воспользоваться PHP Sandbox).

Подробнее узнать о том, как установить и запустить сервер для изучения PHP, можно в статье: Локальный сервер для web-разработки. Тут я опишу основы синтаксиса языка и разберу пару простых примеров, чтобы было понятно - как всё устроено и с чего начинать.

Проще (и полезнее) начать изучать PHP в контексте взаимодействия с HTML, создавая простые web-странички, внутри которых php-скрипт будет решать некоторые задачи. Скрипт php может быть включён в код html-страницы посредством вышеуказанной конструкции:

html-код

<?php  
фрагмент кода php ;
?>

html-код

<?php  
фрагмент кода php ;
?>

html-код

Важно понимать, что не достаточно просто разместить php-скрипт внутри html-страницы. Чтобы он выполнился, нужно сменить расширение html-страницы с .html на .php, иначе она обработана php-обработчиком не будет и результат выполнения кода вы так и не увидите (см. схему выше).

Синтаксис языка PHP

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

Integer - целые числа, такие как 1, 2, -8, 340
Double - числа с плавающей точкой, например 423.48
Boolean - двоичный тип. true или false (1 или 0, правильно или ложно)
String - строки символов (или проще - текст)
Array - массивы данных (данные со множеством значений)

Важно отметить отличительную особенность типа String. Этот тип данных заключается в кавычки. То есть

4 - это тип данных Integer (целое число)
"4" - тип данных String (символ)

И хотя особенность PHP заключается в том, что тип данных можно не объявлять (обработчик сам определит), иногда нужно учитывать эти отличия, так как это может приводить к ошибке.

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

echo "Приветствие!" ;
// Выведет слово Приветствие!

В PHP, как и в других языках, есть возможность делать пометки и оставлять комментарии прямо внутри кода. Для этого в начале строки (или в конце после php-кода) нужно ставить двойной слеш //  В примере выше вы можете наблюдать пример комментария. Также в php для этих целей используют символ решётки #

echo "Приветствие!" ;
// комментарий php
# комментарий php
echo "Приветствие!" ; //комментарий в конце строки

Все выражения в PHP (кроме строк-комментариев) отделяются друг от друга точкой с запятой (;). Ставят её как правило в конце строки, а следующее выражение начинают с новой. Это очень важный момент, так как на практике отсутствие этого знака между выражениями вызовет ошибку.

Также немаловажную роль играет использование двойных и одинарных кавычек. Команда echo выводит данные как текст (тип string) только когда эти данные заключены в кавычки (в двойные или одинарные). Если в выводимой строке тоже присутствуют кавычки, нужно следить, чтобы они были у строки и команды разными:

//это касается всех данных вида string

echo "кавычки внутри 'echo' одинарные" ;
echo 'кавычки внутри "echo" двойные';

Также стоит учитывать способ обработки данных внутри кавычек. PHP обрабатывает содержиме двойных (") и одинарных (') кавычек по-разному. Внутри двойных кавычеках служебные символы (например, переменные $x) воспринимаются как есть и обрабатываются. Внутри одинарных кавычек все символы обрабатываются и выводятся как символы:

кавычки и строки в PHP

Спасибо Андрею, прокомментировавшему этот момент и обратившему моё внимание на него. Изначально я не описал эту особенность в статье, хотя различие в обработке двойных и одинарных кавычек – важный момент. Имевший место даже для одного из простых примеров, приведённых ниже в этой статье. 

При использовании кавычек следует учитывать то, что кавычки идут парами - открывающая и закрывающая. Если нужно вывести код, содержащий кавычки при помощи echo, то следует этот момент учитывать. Иногда в виде строки выводят код, содержащий в себе оба вида кавычек.

В этом случае кавычку можно экранировать, т.е. указать обработчику PHP не учитывать этот символ. Экранируются символы обратным слэшем:

echo "экранируем кавычки внутри \"echo\" " ;

экранирование служебных символов в PHP

Переменные в PHP

Очень широко в PHP применяются переменные, вроде переменных X и Y в алгебре. Однако, для обработчика php-кода Х и У - всего лишь символы, поэтому переменные в PHP принято указывать при помощи символа $:

$Х, $У

Переменные могут представлять собой любой тип данных:

$Х = 32 ; //(Integer)
$У = "width=40%" ; //(String)

Правилом хорошего тона является именование переменных с отражением их назначения. Например, переменная, хранящая какие-то данные счётчиков, именуется $count, а переменная, хранящая данные с текстом почтового сообщения пользователля - $user_mail.

Одним из способов вывод переменных на страницу является вывод посредством команды echo:

$number = 12 ;
echo $number ; // выведет 12

Важно помнить разницу между обработкой двойных и одинарных кавычек:

$number = 12 ;

echo "В году $number месяцев" ;
// выведет В году 12 месяцев

echo 'В году $number месяцев' ;
// В году $number месяцев

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

Операторы и операнды

Помимо типов данных существуют такие определения, как операторы и операнды. Над операндами производят действия с помощью операторов. Рассмотрим на простом примере. Сложим два числа: 2+3 .

2 и 3 - это операнды, а знак сложения - оператор. Все вместе это называется выражением. Операторов достаточно много. Их полный список можно без труда найти в интернете или учебнике. Тут я приведу несколько арифметических операторов для примера. В качестве операндов возьмем числа 7 и 2:

// присваиваем переменной значение 7
// оператор присвоения значений: =

$x = 7 ;
echo $x ; //выводит 7

Стоит отметить, что символ равенства (=) – это оператор присвоения значения, а не равенства одного значения другому. Выражение 7=7 приведёт к ошибке, т.к. числу 7 нельзя присвоить значение 2 и вообще присвоить значение можно только переменным величинам. Правильной в этом случае будет запись 7==7 (оператор равенства == рассмотрим ниже).

// оператор сложения: +
//присваиваем $num1 значение 7+2 (9)

$sum1 = 7 + 2 ;
 
//присваиваем $num2 значение $sum1+5 (14)

$sum2 = $sum1 + 5 ;
 
//выводим на экран $num2 (14)

echo $sum2 ;
// оператор вычитания: -

$min1 = 7 - 2 ;
$min2 = $min1 - 4 ;
echo $min2 ; //выводит 1
// оператор умножения: *

$multi = 7 * 2 ;
echo $multi ; //выводит 14
// оператор деления: /

$divide = 7 / 2 ;
echo $divide ; //выводит 3.5
 
//тип данных Double
// оператор остатка от деления: %

$divide2 = 7 % 2 ;
echo $divide2 ; //выводит 1
 
//тип данных Integer

Поясню работу последнего из приведённых операторов, поскольку она не для всех может быть очевидна из примера. Число 7 делится на 2. При простом делении получается 3.5, но в данном случае в расчёт берутся целые числа. Таким образом, в вычислении учитывается не 3.5, а целое число 3. А остаток получается из выражения: 7=(3*2)+1. Поэтому в остатке указана единица.

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

Выше я писал о том, что чаще всего ознакомительные статьи начинаются спримеров использования echo. Это одна из самых часто используемых (и простых) команд. Не менее популярным является условный оператор if. Он также достаточно прост и применяется для описания условий, при которых код либо выполняется, либо нет.

Условный оператор if поможет разобрать несколько других операторов, работу которых без него наглядно продемонстрировать сложно. Синтаксис у if следующий:

//если (условие выполняется) - действие
//в противном случае - другое действие
 
//if (условие) {действие} ;
//else {другое действие} ;
 
//пример
$y = 7 ;
if ( $y == 7 ) {
echo "переменная равна 7" ; 
}
else {
echo "переменная не равна 7" ;
}

Теперь рассмотрим работу операторов сравнения при помощи условного оператора. Начнём с оператора равенства, о котором я упоминал выше:

// оператор равенства ==

if ( 7 == 7 ) {
$result = "верно (true)" ;
}
else {
$result = "ложно (false)" ;
}
echo $result ; //выводит ложно (false)
 
//тип данных Boolean

Исходя из примера выше, арифметическое выражение 2+3=5 в переводе на язык php будет иметь следующий вид: 2+3==5

// оператор неравенства: !=

if ( 7 != 2 ) {
$result2 = "верно (true)" ;
}
else {
$result2 = "ложно (false)" ;
}
echo $result2 ; //выводит верно (true)
 
//тип данных Boolean
// оператор больше: >

if ( 7 > 2 ) {
$result3 = "верно (true)" ;
}
else {
$result3 = "ложно (false)" ;
}
echo $result3 ; //выводит верно (true)
 
//тип данных Boolean
// оператор меньше: <

if ( 7 < 2 ) {
$result4 = "ложно (false)" ;
}
else {
$result4 = "верно (true)" ;
}
echo $result4 ; //выводит ложно (false)
 
//тип данных Boolean

Любой из приведённых примеров можно скопировать в текстовой файл, поменять расширение файла на .php и при помощи локального сервера посмотреть как всё это выполняется, а также поэкспериментировать. Также можно скопировать и вставить в PHP Sandbox.

Использование переменных

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

$rub = "500" ;
$cash = "Стоимость $rub рублей" ;
echo "$cash" ; 
 
//выводит Стоимость 500 рублей

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

$file = "index" ;
$file_name = "$file.html" ;

В результате выполнения этого кода значением переменной $file_name станет не index.html, а $file.html, что вызовет ошибку при дальнейшем использовании переменной $file_name. Поскольку переменную в данном случае предполагается совместить (склеить) с текстом, необходимо использовать оператор совмещения строк - точку (.), который склеивает строки и (или) переменные в одно целое в различных сочетаниях. Пример:

$file = "index" ;
$file_name = $file.".html" ;
//склеивает переменную $file и строку ".html"
 
echo $file_name;
// выводит index.html


echo "поп"."уляр"."ность";
// склеивает 3 строки и выводит "популярность"

Данный оператор можно использовать в совокупности с оператором присвоения:

$word = "поп";
$word .= "уляр";
$word .= "ность";

echo $word;

//выводит популярность

Строки и переменные можно склеивать в разном порядке:

$word = 'популярность';
$attempt = 'катастрофически';

echo $word.' ваша снижается '.$attempt.'!';

// выведет: популярность ваша снижается катастрофически!

Надеюсь, все понятно. Теперь перейдем к более сложным и более практичным примерам использования команд PHP.

Использование PHP при создании сайтов

Допустим, стоит задача сделать простой информационный HTML-документ (сайт) в две колонки – в одной меню, в другой информация. Создаётся таблица с двумя колонками, в левую помещается html-код меню, а в правую текст (информация):

<table>
  <tr>
    <td>
      html-код меню
    <td>
    <td>
      html-код контента
    <td>
  <tr>
<table>

Допустим, что нужно создать 5 страниц с различной информацией, связав их между собой меню. Одинаковый код меню придётся разместить на каждой из пяти страниц. И если меню изменится (добавится 6-ая страница), нужно будет внести одинаковые правки в каждый файл. Когда страниц 5 это не проблема, когда их 50 – задача становится трудоёмкой.

PHP позволит избежать этой рутинной работы путём выноса повторяющихся (одинаковых) участков кода в отдельный файл, который будет подгружаться в код основного файла по запросу. Чтобы подгружать меню, воспользуемся выражением include, позволяющим включать содержимое одного файла в тело другого. Пару слов об include:

//синтаксис работы include:
include 'адрес_и_имя_файла';
 
//пример
include 'pages/info.html';

Таким способом можно включать текстовые файлы различных расширений (.txt, .html, .php и другие). Вернёмся к примеру с сайтом. Нам необходимо вынести код меню в отдельный файл, чтобы избежать дублирования кода и иметь возможность редактировать его с минимальными трудозатратами. Пусть это будет файл menu.html.

Помимо файла меню у нас имеются пять файлов с информацией (текстом), доступ к которой мы осуществляем через него. Сама страница, на которую должна выводится информацию, также может содержать код оформления, который придётся дублировать для каждой новой информационной страницы. И если вдруг встанет задача поменять оформление страниц, то повторится ситуация с множественными одинаковыми исправлениями.

PHP позволяет минимизировать и эти работы. Файл меню мы добавляем при помощи include, таким же образом можно подгужать на страницу и файл с текстом. При этом у нас получится 1 файл с меню, 1 файл с оформлением страницы и 5 файлов с информацией. Таким образом мы сможем полностью отделить навигацию (меню) и оформление страницы (шаблон страницы) от информации (контента).

Файл меню мы уже обозначили как menu.html. Файл шаблона пусть будет index.php (указываем расширение php, т.к. шаблон будет содержать php-код). Файлы с информацией пусть будут info_1.html, info_2.html b т.д..

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

Параметр так и назовём – page. Параметры в ссылках указываются при помощи знака вопроса. Получим:

адрес нашего шаблона:
http://www.mysite.ru/index.php

пример гиперссылки с параметром (запрос страницы №2):
http://www.mysite.ru/index.php?page=2

Возвращаемся к коду шаблона index.php. Он содержит таблицу с двумя колонками, в которые загружается меню и информация при помощи include. Код получится следующий:

<table>
<td>
<?php
include "menu.html" ;
?>
<td></td>
<?php
include "info_".$_GET['page'].".html" ;
?>
</td>
<table>

Давайте разберемся более подробно. $_GET – глобальный массив данных в PHP, который записывает и хранит все параметры, которые передаются странице в ссылках в открытом виде. Мы, обратившись к index.php, передали в ссылке параметр page. Теперь параметр будет доступен внутри шаблона index.php. Запросить (получить) его можно при помощи выражения $_GET['page'].

Передавали мы двойку (2). Нам нужно получить готовый адрес страницы info_2.html, который нужен для include. Вспоминаем оператор совмещения строк (точку). С его помощью мы склеиваем строки "info_" и ".html" с переданной двойкой (2) и получаем готовый адрес info_2.html . Вся цепочка действий:

  1. Нажимаем на ссылку. Обозреватель посылает запрос на сервер:
    http://www.mysite.ru/index.php?page=2
  2. На сервере параметр page записывается в глобальный массив $_GET
  3. Запускается скрипт index.php, к которому мы обратились, выражение include вставляет в шаблон код меню из файла menu.html.
  4. Далее скрипт index.php получает из глобального массива $_GET переданное значение $_GET['page'], равное двум (2).
  5. Затем данные склеиваются "info_".$_GET['page'].".html" и передаются оператору include,  который импортирует в шаблон index.php информацию, содержащуюся в файле: include "info_2.html"
  6. Скрипт index.php заканчивает работу и сервер передаёт в обозреватель результат. В окне обозревателя выводится страница, содержащая две колонки - с меню и текстом.

Функции PHP

Функция – это набор инструкций. Она получает параметры, обрабатывает их согласно этому набору и возвращает результат. Пример простейшей функции:

// функция имя_функции( параметр_1, параметр_2 ){ инструкции }

function show_text( $param_1, $param_2 ){

$result = $param_1 + $param_2 ;

echo $result ;
}

// Вызов функции
show_text( "3" , "5" ) ;

Можете в SandBox поэкспериментировать и написать свою функцию, используя примеры с операторами выше. Это не сложно:

функции php

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

Выводы

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

Ещё раз вернусь к схеме обработки запросов на сервере, теперь (я надеюсь), она стала более понятной:

схема обработки запроса сервером

Очень важно следить за последовательностью команд. Тут почти как с каскадностью в CSS. Прежде чем использовать переменную, необходимо присвоить ей значение:

//Последовательность действий:

$X = 3 ;

$Y = $X + 5;

echo $Y;

Обработчик не возвращается, если это явно не указано php-программой. При обработке встречается переменная. Значение было? Значения не было. Нет значения - нет переменной. А далее или ошибка или неправильная работа программы. Так что будьте внимательны!

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

Напоследок  расскажу о паре моментов, которые часто игнорируют и получают ошибки undefined variable. При использовании условий часто пишут конструкции вида:

// объявляем переменную
$variable = '';

// произвольный код...

if($variable) {
  действие....
}

При этом появляются ошибки категории Notice, т.е. уведомительного, а не критического характера. Всё работает, но хорошо бы исправить.

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

// объявляем переменную
$variable = '';

// ! - оператор отрицания, читается как "если не пустой, то действие"

if( !empty( $variable ) ) {
  действие....
}

// без оператора отрицания - "если пустой, то действие"

if( empty( $variable ) ) {
  действие....
}

Представьте, что в примере выше, где мы собирали файл с меню и текстом, не был передан параметр. Или был, но файла с таким номером не существует. Тогда результат работы include будет такой:

// запрос без параметра сформируется как info_.html

include "info_".$_GET['page'].".html" ;

// выдаст ошибку, т.к. файл info_.html не существует

Чтобы этого не произошло, надо использовать условный оператор if else и проверку на существование переменной с параметром empty(), а также проверять - находится ли параметр в диапазоне от 2 до 5. Чтобы можно было проследить работу примера в SundBox, заменю $_GET['page'] на переменную $page_param, а include на echo:

<?php

$page_param = "7" ;

if( !empty( $page_param ) AND $page_param > 1 AND $page_param < 6 ) {

  $page = $page_param ;  

} else {

  $page = 1 ;

}

echo "info_".$page.".html" ;

AND - логический оператор И, OR - логический оператор ИЛИ. С их помощью можно комбинировать условия для if else.

Читается так: если $page_param не пустой И он больше единицы И он меньше шести, то присвоить переменной $page значение $page_param, в противном случае присвоить $page единицу. Вывести $page.

Таким образом, если переменная не будет равна числу от 2 до 5, то будет загружена информация из файла info_1.html

И последнее: если переменная выполнила своё предназначение и далее в скрипте не понадобится, её можно уничтожить:

// объявляем переменную
$variable = '';

// произвольный кусок кода...

if( !empty($variable) ) {
  действие....
}

// уничтожаем переменную
unset( $variable );

Как я уже отмечал выше, это только малая часть информации, которую стоит изучить, но делать статью ещё объёмнее я не решалися, т.к. боялся утомить читателей.

Если материалы сайта оказались для вас полезными, можете поддержать дальнейшее развитие ресурса, оказав ему (и мне ) моральную и материальную поддержку.

Поддержи Nevor.ru

руб.
Комментарии читателей
Имя: Dmitry
27 марта 2016 г.
С условными операторами немного накосячили. Исправьте, пожалуйста.
Ответить
Администратор сайта (nevor.ru)
27 марта 2016 г.
Исправил (если вы имели ввиду опечатку)
Цитата
с условноым оператором if
Если имелось ввиду что-то другое - уточните, пожалуйста.
Ответить
Имя: Антон
15 сентября 2016 г.
Подскажите как определенный участок страницы вывести?

к примеру 1 блок текста из всего документа
Ответить
Администратор сайта (nevor.ru)
16 сентября 2016 г.
Не совсем понял вопрос. В PHP текст выводится командами echo или print. Что зададите, то и выведет там, где напишете. Можно сначала загнать текст в переменные и потом выводить эти переменные где требуется.

Можете более подробно изложить свой вопрос и отправить мне на почту через форму обратной связи.
Ответить
Имя: Andrew
31 января
// присваиваем переменной значение 7
// оператор присвоения значений: =

$x = 7 ;
echo "$x" ; //выводит $x
echo $x ; //выводит 7

...у меня так получилось
Ответить
Администратор сайта (nevor.ru)
31 января
Спасибо, что обратили внимание! Действительно, как указано выше в статье, в кавычках выводятся строки. Переменные нужно выводить без кавычек. Опечатка. Кавычки из примера убрал.
Ответить
Оставьте комментарий
Имя*:
Подписаться на комментарии (впишите e-mail):

Введите код с картинки:
* — Поля, обязательные для заполнения
Похожие статьи
создание локального сервера

Web-разработка требует определённых инструментов и условий для работы. В первую очередь это конечно же наличие выхода в интернет. Большинство web-приложения пишутся на различных языках программирования. Часть из них - серверные. Например, широко известный язык PHP.

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

26 января 2016 г.

Яндекс.Метрика

Мониторинг доступности сайта Host-tracker.com