Тематический план
3.1 Веб-сервер и его использования
Использование веб-сервера
Понятие «веб-сервер» может относиться как к аппаратной начинке, так и к программному обеспечению. Или даже к обеим частям, работающим совместно.
- С точки зрения "железа", «веб-сервер» — это компьютер, который хранит файлы сайта (HTML-документы, CSS-стили, JavaScript-файлы, картинки и другие) и доставляет их на устройство конечного пользователя (веб-браузер и т.д.). Он подключен к сети Интернет и может быть доступен через доменное имя, подобное google.com.
- С точки зрения ПО, веб-сервер включает в себя несколько компонентов, которые контролируют доступ веб-пользователей к размещенным на сервере файлам, как минимум — это HTTP-сервер. HTTP-сервер — это часть ПО, которая понимает URL’ы (веб-адреса) и HTTP (протокол, который ваш браузер использует для просмотра веб-страниц).
На самом базовом уровне, когда браузеру нужен файл, размещенный на веб-сервере, браузер запрашивает его через HTTP-протокол. Когда запрос достигает нужного веб-сервера ("железо"), сервер HTTP (ПО) принимает запрос, находит запрашиваемый документ (если нет, то сообщает об ошибке 404) и отправляет обратно, также через HTTP.
Чтобы опубликовать веб-сайт, необходим либо статический, либо динамический веб-сервер.
Статический веб-сервер
Статический веб-сервер, или стек, состоит из компьютера ("железо") с сервером HTTP (ПО). Мы называем это «статикой», потому что сервер посылает размещенные файлы в браузер «как есть».
Динамический веб-сервер
Динамический веб-сервер состоит из статического веб-сервера и дополнительного программного обеспечения, чаще всего сервера приложения и базы данных. Мы называем его «динамическим», потому что сервер приложений изменяет исходные файлы перед отправкой в ваш браузер по HTTP.
Например, для получения итоговой страницы, которую вы просматриваете в браузере, сервер приложений может заполнить HTML-шаблон данными из базы данных. Такие сайты, как MDN или Википедия, состоят из тысяч веб-страниц, но они не являются реальными HTML документами — лишь несколько HTML-шаблонов и гигантские базы данных. Эта структура упрощает и ускоряет сопровождение веб-приложений и доставку контента.
Прежде всего, веб-сервер должен содержать файлы веб-сайта, а именно все HTML-документы и связанные с ними ресурсы, включая изображения, CSS-стили, JavaScript-файлы, шрифты и видео.
Технически, вы можете разместить все эти файлы на своем компьютере, но гораздо удобнее хранить их на выделенном веб-сервере, который:
- всегда запущен и работает
- всегда подключен к Интернету
- имеет неизменный IP адрес (не все провайдеры предоставляют статический IP-адрес для домашнего подключения)
- обслуживается третьей, сторонней компанией
По всем этим причинам поиск хорошего хостинг-провайдера является ключевой частью создания вашего сайта. Рассмотрите многочисленные предложения компаний и выберите то, что соответствует вашим потребностям и бюджету (предложения варьируются от бесплатных до тысяч долларов в месяц). Вы можете найти подробности в этой статье.
Как только вы решили проблему с хостингом, вам понадобится только загрузить свои файлы на ваш веб-сервер.
3.2 Переменные и типы данных
Переменные и типы PHP
Переменные в PHP представлены знаком доллара с последующим именем переменной. Имя переменной чувствительно к регистру.
Имена переменных соответствуют тем же правилам, что и остальные наименования в PHP. Правильное имя переменной должно начинаться с буквы или символа подчёркивания и состоять из букв, цифр и символов подчёркивания в любом количестве. Это можно отобразить регулярным выражением: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Под буквами здесь подразумеваются символы a-z, A-Z и байты от 128 до 255 (0x80-0xff).
Обратите внимание: $this - это специальная переменная, которой нельзя ничего присваивать.
<?php
$var
=
'Боб'
;
$Var
=
'Джо'
;
echo
"
$var
,
$Var
"
;
// выведет "Боб, Джо"
$
4site
=
'ещё нет'
;
// неверно; начинается с цифры
$_4site
=
'ещё нет'
;
// верно; начинается с символа подчёркивания
$täyte
=
'mansikka'
;
// верно; 'ä' это (Расширенный) ASCII 228.
?>
По умолчанию переменные всегда присваиваются по значению. То есть, когда вы присваиваете выражение переменной, все значение оригинального выражения копируется в эту переменную. Это означает, к примеру, что после того, как одной переменной присвоено значение другой, изменение одной из них не влияет на другую. PHP также предлагает иной способ присвоения значений переменным: присвоение по ссылке. Это означает, что новая переменная просто ссылается (иначе говоря, "становится псевдонимом" или "указывает") на оригинальную переменную. Изменения в новой переменной отражаются на оригинале, и наоборот.
Для присвоения по ссылке, просто добавьте амперсанд (&) к началу имени присваиваемой (исходной) переменной. Например, следующий фрагмент кода дважды выводит 'Меня зовут Боб':
<?php
$foo
=
'Боб'
;
// Присваивает $foo значение 'Боб'
$bar
= &
$foo
;
// Ссылка на $foo через $bar.
$bar
=
"Меня зовут
$bar
"
;
// Изменение $bar...
echo
$bar
;
echo
$foo
;
// меняет и $foo.
?>
Важно отметить, что по ссылке могут быть присвоены только именованные переменные.
<?php
$foo
=
25
;
$bar
= &
$foo
;
// Это верное присвоение.
$bar
= &(
24
*
7
);
// Неверно; ссылка на неименованное выражение.
function
test
()
{
return
25
;
}
$bar
= &
test
();
// Неверно.
?>
Хорошей практикой считается инициализировать переменные, хотя в PHP это и не является обязательным требованием. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: булевы принимают значение false, целые числа и числа с плавающей точкой - ноль, строки (например, при использовании в echo) - пустую строку, а массивы становятся пустыми массивами.
PHP поддерживает десять простых типов.
Четыре скалярных типа:
- bool
- int
- float (число с плавающей точкой, также известное как double)
- string
Четыре смешанных типа:
- array
- object
- callable
- iterable
И, наконец, два специальных типа:
- resource
- NULL
Вы также можете найти несколько упоминаний типа двойной точности (double). Рассматривайте его как число с плавающей точкой, два имени существуют только по историческим причинам.
Как правило, программист не устанавливает тип переменной; обычно это делает PHP во время выполнения программы в зависимости от контекста, в котором используется переменная.
Обратите внимание: Если вы желаете проверить тип и значение определённого выражения, используйте var_dump().
Если же вам для отладки необходимо просто удобочитаемое представление типа, используйте gettype(). Чтобы проверить на определённый тип, не используйте gettype(), применяйте для этого функции is_type. Вот несколько примеров:
<?php
$a_bool
=
TRUE
;
// логический
$a_str
=
"foo"
;
// строковый
$a_str2
=
'foo'
;
// строковый
$an_int
=
12
;
// целочисленный
echo
gettype
(
$a_bool
);
// выводит: boolean
echo
gettype
(
$a_str
);
// выводит: string
// Если это целое, увеличить на четыре
if (
is_int
(
$an_int
)) {
$an_int
+=
4
;
}
// Если $a_bool - это строка, вывести её
// (ничего не выводит)
if (
is_string
(
$a_bool
)) {
echo
"Строка:
$a_bool
"
;
}
?>
Если вы хотите принудительно изменить тип переменной, вы можете либо привести переменную, либо использовать функцию settype().
Обратите внимание, что переменная, в зависимости от её типа в данный момент, в определённых ситуациях может иметь разные значения.
3.3 Операторы и их использования
Операторы PHP и их использование
Оператором называется нечто, состоящее из одного или более значений (выражений, если говорить на жаргоне программирования), которое можно вычислить как новое значение (таким образом, вся конструкция может рассматриваться как выражение). Отсюда следует, что функции или любые другие конструкции, которые возвращают значение (например, print()) являются операторами, в отличие от всех остальных языковых конструкций (например, echo()), которые ничего не возвращают.
Арифметические операторы
Помните школьные основы арифметики? Описанные ниже операторы работают так же.
Пример
Название
Результат
-$a
Отрицание
Смена знака $a.
$a + $b
Сложение
Сумма $a и $b.
$a - $b
Вычитание
Разность $a и $b.
$a * $b
Умножение
Произведение $a и $b.
$a / $b
Деление
Частное от деления $a на $b.
$a % $b
Деление по модулю
Целочисленный остаток от деления $a на $b.
$a ** $b
Возведение в степень
Результат $a в степени $b. (появилось в PHP 5.6.0)
Операция деления ("/") всегда возвращает вещественный тип, даже если оба значения были целочисленными (или строками, которые преобразуются в целые числа).
Возможно также использовать скобки. Приоритет одних математических операций над другими и изменение приоритетов при использовании скобок в арифметических выражениях соответствуют обычным математическим правилам.
Операторы инкремента и декремента
PHP, аналогично C, поддерживает префиксные и постфиксные операторы инкремента и декремента.
Пример
Название
Действие
++$a
Префиксный инкремент
Увеличивает $a на единицу и возвращает значение $a.
$a++
Постфиксный инкремент
Возвращает значение $a, а затем увеличивает $a на единицу.
--$a
Префиксный декремент
Уменьшает $a на единицу и возвращает значение $a.
$a--
Постфиксный декремент
Возвращает значение $a, а затем уменьшает $a на единицу.
Булевые типы не подлежат инкрементированию и декрементированию.
Операторы присвоения
Базовый оператор присвоения обозначается как =. На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности, оператор присвоения означает, что левый операнд получает значение правого выражения, (т.е. устанавливается результирующим значением).
Результатом выполнения оператора присвоения является само присвоенное значение. Таким образом, результат выполнения $a = 3 будет равен 3. Это позволяет использовать конструкции вида:
<?php
$a = ($b = 4) + 5; // результат: $a установлена значением 9, переменной $b присвоено 4.
?>В дополнение к базовому оператору присвоения имеются "комбинированные операторы" для всех бинарных арифметических и строковых операций, которые позволяют использовать некоторое значение в выражении, а затем установить его как результат данного выражения. Например:
<?php
$a = 3;
$a += 5; // устанавливает $a значением 8, аналогично записи: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // устанавливает $b строкой "Hello There!", как и $b = $b . "There!";
?>Обратите внимание, что присвоение копирует оригинальную переменную в новую (присвоение по значению), таким образом все последующие изменения одной из переменных на другой никак не отражаются. Начиная с PHP 4, также поддерживается присваивание по ссылке, используя синтаксис $var = &$othervar; 'Присвоение по ссылке' означает, что обе переменные указывают на одни и те же данные и никакого копирования не происходит.
Побитовые операторы
Данные операторы предназначены для установки или снятия групп битов целочисленной переменной. Ведь любое число - это просто последовательность бит. Целые числа в PHP - 32-битные.
Для представления одного числа используются 32 бита:
- 0000 0000 0000 0000 0000 0000 0000 0000 - это ноль;
- 0000 0000 0000 0000 0000 0000 0000 0001 - это 1;
- 0000 0000 0000 0000 0000 0000 0000 0010 - это 2;
- 0000 0000 0000 0000 0000 0000 0000 0011 - это 3;
- 0000 0000 0000 0000 0000 0000 0000 0100 - это 4;
- 0000 0000 0000 0000 0000 0000 0000 0101 - это 5;
- ...
- 0000 0000 0000 0000 0000 0000 0000 1111 - это 15;
- ...
Побитовые операторы:
Пример
Название
Результат
$a & $b
Побитовое 'и'
Устанавливаются только те биты, которые установлены и в $a, и в $b.
$a | $b
Побитовое 'или'
Устанавливаются те биты, которые установлены либо в $a, либо в $b.
$a ^ $b
Исключающее или
Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b
~ $a
Отрицание
Устанавливаются те биты, которые в $a не установлены, и наоборот.
$a << $b
Сдвиг влево
Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает 'умножение на 2')
$a >> $b
Сдвиг вправо
Все биты переменной $a сдвигаються на $b позиций вправо (каждая позиция подразумевает 'деление на 2')
Операторы сравнения
Операторы сравнения, как это видно из их названия, позволяют сравнивать между собой два значения. В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP сравнивать нельзя.
Операторы сравнения:
Пример
Название
Результат
$a == $b
Равно
TRUE если $a равно $b.
$a === $b
Тождественно равно
TRUE если $a равно $b и имеет тот же тип. (Добавлено в PHP 4)
$a != $b
Не равно
TRUE если $a не равно $b.
$a <> $b
Не равно
TRUE если $a не равно $b.
$a !== $b
Тождественно не равно
TRUE если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4)
$a < $b
Меньше
TRUE если $a строго меньше $b.
$a > $b
Больше
TRUE если $a строго больше $b.
$a <= $b
Меньше или равно
TRUE если $a is меньше или равно $b.
$a >= $b
Больше или равно
TRUE если $a больше или равно $b.
Логические операторы
Приведем таблицу логических операторов PHP:
Пример
Название
Результат
$a and $b
Логическое 'и'
TRUE если и $a, и $b TRUE.
$a or $b
Логическое 'или'
TRUE если или $a, или $b TRUE.
$a xor $b
Исключающее 'или'
TRUE если $a, или $b TRUE, но не оба.
! $a
Отрицание
TRUE если $a не TRUE.
$a && $b
Логическое 'и'
TRUE если и $a, и $b TRUE.
$a || $b
Логическое 'или'
TRUE если или $a, или $b TRUE.
Операторы инкремента (++) и декремента (--) не работают с логическими переменными.
Приоритеты операторов PHP
Операторы с более высоким уровнем приоритета выполняются в первую очередь:
Приоритет
Оператор
Порядок выполнения
13
(постфикс)++ (постфикс)--
слева направо
12
++(префикс) --(префикс)
справа налево
11
* / %
слева направо
10
+ -
слева направо
9
<< >>
слева направо
8
< <= > >=
слева направо
7
== !=
слева направо
6
&
слева направо
5
^
слева направо
4
|
слева направо
3
&&
слева направо
2
||
слева направо
1
= += -= *= /= %= >>= <<== &= ^= |=
справа налево
В любом случае, если вы сомневаетесь, или боитесь ошибиться, используйте скобки.
Строковые операторы
В PHP есть два оператора для работы со строками. Первый - оператор конкатенации ('.'), который возвращает объединение левого и правого аргумента. Второй - оператор присвоения с конкатенацией, который присоединяет правый аргумент к левому. Приведем конкретный пример:
<?php
$a = "Hello ";
$b = $a . "World!"; // $b содержит строку "Hello World!"
$a = "Hello ";
$a .= "World!"; // $a содержит строку "Hello World!"
?>
3.4 Циклы и их виды
Циклы в PHP
На втором месте по частоте использования, после конструкций условий (условных операторов), находятся циклы.
Циклы позволяют повторять определенное (и даже неопределенное - когда работа цикла зависит от условия) количество раз различные операторы. Данные операторы называются телом цикла. Проход цикла называется итерацией.
PHP поддерживает виды циклов:
- Цикл с предусловием (while);
- Цикл с постусловием (do-while);
- Цикл со счетчиком (for);
- Специальный цикл перебора массивов (foreach).
При использовании циклов есть возможность использования операторов break и continue. Первый из них прерывает работу всего цикла, а второй - только текущей итерации.
Рассмотрим циклы PHP:
Цикл с предусловием while
Цикл с предусловием while работает по следующим принципам:
- Вычисляется значение логического выражения.
- Если значение истинно, выполняется тело цикла, в противном случае - переходим на следующий за циклом оператор.
Синтаксис цикла с предусловием:
while (логическое_выражение)
инструкция;В данном случае телом цикла является инструкция. Обычно тело цикла состоит из большого числа операторов. Приведем пример цикла с предусловием while:
<?php
$x=0;
while ($x++<10) echo $x;
// Выводит 12345678910
?>Обратите внимание на последовательность выполнения операций условия $x++<10. Сначала проверяется условие, а только потом увеличивается значение переменной. Если мы поставим операцию инкремента перед переменной (++$x<10), то сначала будет выполнено увеличение переменной, а только затем - сравнение. В результате мы получим строку 123456789. Этот же цикл можно было бы записать по-другому:
<?php
$x=0;
while ($x<10)
{
$x++; // Увеличение счетчика
echo $x;
}
// Выводит 12345678910
?>Если мы увеличим счетчик после выполнения оператора echo, мы получим строку 0123456789. В любом случае, мы имеем 10 итераций. Итерация — это выполнение операторов внутри тела цикла.
Подобно конструкции условного оператора if, можно группировать операторы внутри тела цикла while, используя следующий альтернативный синтаксис:
while (логическое_выражение):
инструкция;
...
endwhile;Пример использования альтернативного синтаксиса:
<?php
$x = 1;
while ($x <= 10):
echo $x;
$x++;
endwhile;
?>Цикл с постусловием do while
В отличие от цикла while, этот цикл проверяет значение выражения не до, а после каждого прохода (итерации). Таким образом, тело цикла выполняется хотя бы один раз. Синтаксис цикла с постусловием такой:
do
{
тело_цикла;
}
while (логическое_выражение);После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается.
Альтернативного синтаксиса для do-while разработчики PHP не предусмотрели (видимо, из-за того, что, в отличие от прикладного программирования, этот цикл довольно редко используется при программировании web-приложений).Пример скрипта, показывающего работу цикла с постусловием do-while:
<?php
$x = 1;
do {
echo $x;
} while ($x++<10);
?>Рассмотренный сценарий выводит: 12345678910
Цикл со счетчиком for
Цикл со счетчиком используется для выполнения тела цикла определенное число раз. С помощью цикла for можно (и нужно) создавать конструкции, которые будут выполнять действия совсем не такие тривиальные, как простая переборка значения счетчика.
Синтаксис цикла for такой:
for (инициализирующие_команды; условие_цикла; команды_после_итерации) { тело_цикла; }
Цикл for начинает свою работу с выполнения инициализирующих_команд. Данные команды выполняются только один раз. После этого проверяется условие_цикла, если оно истинно (true), то выполняется тело_цикла. После того, как будет выполнен последний оператор тела, выполняются команды_после_итерации. Затем снова проверяется условие_цикла. Если оно истинно (true), выполняется тело_цикла и команды_после_итерации, и.т.д.
<?php
for ($x=0; $ x<10; $x++) echo $x;
?>Данный сценарий выводит: 0123456789
Есть вариант вывода строки 12345678910:
<?php
for ($x=0; $ x++<10;) echo $x;
// Выводит 12345678910
?>В данном примере мы обеспечили увеличение счетчика при проверке логического выражения. В таком случае нам не нужны были команды, выполняющиеся после итерации.
Если необходимо указать несколько команд, их можно разделить запятыми, пример:
<?php
for ($x=0, $ y=0; $x<10 ; $x++, $y++) echo $x;
// Выводит 0123456789
?>Приведем еще один, более практичный пример использования нескольких команд в цикле for:
<?php
for($i=0,$j=0,$k="Точки"; $i<10; $j++,$i+=$j) { $k=$k."."; echo $k; }
// Выводит Точки.Точки..Точки...Точки....
?>Рассмотренный пример (да и вообще любой цикл for) можно реализовать и через while, только это будет выглядеть не так изящно и лаконично.
Для цикла for имеется и альтернативный синтаксис:
for(инициализирующие_команды; условие_цикла; команды_после_итерации):
операторы;
endfor;Цикл перебора массивов foreach
В PHP4 появился еще один специальный тип цикла - foreach. Данный цикл предназначен специально для перебора массивов.
Синтаксис цикла foreach выглядит следующим образом:
foreach (массив as $ключ=>$значение)
команды;Здесь команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=>значение оказывается в переменных $ключ и $значение. Приведем пример работы цикла foreach:
<?php
$names["Иванов"] = "Андрей";
$names["Петров"] = "Борис";
$names["Волков"] = "Сергей";
$names["Макаров"] = "Федор";
foreach ($names as $key => $value) {
echo "<b>$value $key</b><br>";
}
?>Рассмотренный сценарий выводит:
Андрей Иванов
Борис Петров
Сергей Волков
Федор МакаровУ цикла foreach имеется и другая форма записи, которую следует применять, когда нас не интересует значение ключа очередного элемента. Выглядит она так:
foreach (массив as $значение)
команды;В этом случае доступно лишь значение очередного элемента массива, но не его ключ. Это может быть полезно, например, для работы с массивами-списками:
<?php
$names[] = "Андрей";
$names[] = "Борис" ;
$names[] = "Сергей";
$names[] = "Федор" ;
foreach ($names as $value) {
echo "<b>$value</b><br>";
}
?>Внимание: Цикл foreach оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть "видны" из тела цикла. Что позволяет, например, в качестве массива использовать не только переменную, но и результат работы какой-нибудь функции, возвращающей массив (в этом случае функция будет вызвана всего один раз - до начала цикла, а затем работа будет производиться с копией возвращенного значения).
Конструкция break
Очень часто для того, чтобы упростить логику какого-нибудь сложного цикла, удобно иметь возможность его прервать в ходе очередной итерации (к примеру, при выполнении какого-нибудь особенного условия). Для этого и существует конструкция break, которая осуществляет немедленный выход из цикла. Она может задаваться с одним необязательным параметром - числом, которое указывает, из какого вложенного цикла должен быть произведен выход. По умолчанию используется 1, т. е. выход из текущего цикла, но иногда применяются и другие значения. Синтаксис конструкции break:
break; // По умолчанию
break(номер_цикла); // Для вложенных циклов (указывается номер прерываемого цикла)Приведем примеры:
<?php
$x=0;
while ($x++<10) {
if ($x==3) break;
echo "<b>Итерация $x</b><br>";
}
// Когда $x равен 3, цикл прерывается
?>Рассмотренный сценарий выводит:
Итерация 1
Итерация 2Если нам нужно прервать работу определенного (вложенного) цикла, то нужно передать конструкции break параметр - номер_цикла, например, break(1). Нумерация циклов выглядит следующим образом:
for (...) // Третий цикл
{
for (...) // Второй цикл
{
for (...) // Первый цикл
{
}
}
}Конструкция continue
Конструкция continue так же, как и break, работает только "в паре" с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой (конечно, если выполняется условие цикла для цикла с предусловием). Точно так же, как и для break, для continue можно указать уровень вложенности цикла, который будет продолжен по возврату управления.
В основном continue позволяет вам сэкономить количество фигурных скобок в коде и увеличить его удобочитаемость. Это чаще всего бывает нужно в циклах-фильтрах, когда требуется перебрать некоторое количество объектов и выбрать из них только те, которые удовлетворяют определенным условиям. Приведем пример использования конструкции continue:<?php
$x=0;
while ($x++<5) {
if ($x==3) continue;
echo "<b>Итерация $x</b><br>";
}
// Цикл прервется только на третьей итерации
?>Рассмотренный скрипт выводит:
Итерация 1
Итерация 2
Итерация 4
Итерация 5Грамотное использование break и continue позволяет заметно улучшить "читабельность" кода и количество блоков else.
3.5 Массивы данных
Массивы данных PHP
Массивы (arrays) - это упорядоченные наборы данных, представляющие собой список однотипных элементов.
Существует два типа массивов, различающиеся по способу идентификации элементов.
- В массивах первого типа элемент определяется индексом в последовательности. Такие массивы называются простыми массивами.
- Массивы второго типа имеют ассоциативную природу, и для обращения к элементам используются ключи, логически связанные со значениями. Такие массивы называют ассоциативными массивами.
Важной особенностью PHP является то, что PHP, в отличие от других языков, позволяет создавать массивы любой сложности непосредственно в теле программы (скрипта).
Массивы могут быть как одномерными, так и многомерными.
Простые массивы и списки в PHP
При обращении к элементам простых индексируемых массивов используется целочисленный индекс, определяющий позицию заданного элемента.
Простые одномерные массивы:
Обобщенный синтаксис элементов простого одномерного массива:
$имя[индекс];
Массивы, индексами которых являются числа, начинающиеся с нуля - это списки:
<?php
// Простой способ инициализации массива
$names[0]="Апельсин";
$names[1]="Банан";
$names[2]="Груша";
$names[3]="Помидор";
// Здесь: names - имя массива, а 0, 1, 2, 3 - индексы массива
?>Доступ к элементам простых массивов (списков) осуществляется следующим образом:
<?php
// Простой способ инициализации массива
$names[0]="Апельсин";
$names[1]="Банан";
$names[2]="Груша";
$names[3]="Помидор";
// Здесь: names - имя массива, а 0, 1, 2, 3 - индексы массива
// Выводим элементы массивов в браузер:
echo $names[0]; // Вывод элемента массива names с индексом 0
echo "<br>";
echo $names[3]; // Вывод элемента массива names с индексом 3
// Выводит:
// Апельсин
// Помидор
?>С технической точки зрения разницы между простыми массивами и списками нет.
Простые массивы можно создавать, не указывая индекс нового элемента массива, это за вас сделает PHP. Вот пример:
<?php
// Простой способ инициализации массива, без указания индексов
$names[]="Апельсин";
$names[]="Банан";
$names[]="Груша";
$names[]="Помидор";
// PHP автоматически присвоит индексы элементам массива, начиная с 0
// Выводим элементы массивов в браузер:
echo $names[0]; // Вывод элемента массива names с индексом 0
echo "<br>";
echo $names[3]; // Вывод элемента массива names с индексом 3
// Выводит:
// Апельсин
// Помидор
?>В рассмотренном примере вы можете добавлять элементы массива names простым способом, то есть не указывая индекс элемента массива:
$names[]="Яблоко";
Новый элемент простого массива (списка) будет добавлен в конец массива. В дальнейшем, с каждым новым элементом массива, индекс будет увеличиваться на единицу.
Простые многомерные массивы:
Обобщенный синтаксис элементов многомерного простого массива:
$имя[индекс1][индекс2]..[индексN];
Пример простого многомерного массива:
<?php
// Многомерный простой массив:
$arr[0][0]="Овощи";
$arr[0][1]="Фрукты";
$arr[1][0]="Абрикос";
$arr[1][1]="Апельсин";
$arr[1][2]="Банан";
$arr[2][0]="Огурец";
$arr[2][1]="Помидор";
$arr[2][2]="Тыква";
// Выводим элементы массива:
echo "<h3>".$arr[0][0].":</h3>";
for ($q=0; $q<=2; $q++) {
echo $arr[2][$q]."<br>";
}
echo "<h3>".$arr[0][1].":</h3>";
for ($w=0; $w<=2; $w++) {
echo $arr[1][$w]."<br>";
}
?>Ассоциативные массивы в PHP
В PHP индексом массива может быть не только число, но и строка. Причем на такую строку не накладываются никакие ограничения: она может содержать пробелы, длина такой строки может быть любой.
Ассоциативные массивы особенно удобны в ситуациях, когда элементы массива удобнее связывать со словами, а не с числами.
Итак, массивы, индексами которых являются строки, называются ассоциативными массивами.
Одномерные ассоциативные массивы:
Одномерные ассоциативные массивы содержат только один ключ (элемент), соответствующий конкретному индексу ассоциативного массива. Приведем пример:
<?php
// Ассоциативный массив
$names["Иванов"]="Иван";
$names["Сидоров"]="Николай";
$names["Петров"]="Петр";
// В данном примере: фамилии - ключи ассоциативного массива
// , а имена - элементы массива names
?>Доступ к элементам одномерных ассоциативных массивов осуществляется так же, как и к элементам обыкновенных массивов, и называется доступом по ключу:
echo $names["Иванов"];
Многомерные ассоциативные массивы:
Многомерные ассоциативные массивы могут содержать несколько ключей, соответствующих конкретному индексу ассоциативного массива. Рассмотрим пример многомерного ассоциативного массива:
<?php
// Многомерный массив
$A["Ivanov"] = array("name"=>"Иванов И.И.", "age"=>"25", "email"=>" ivanov@gmail.com");
$A["Petrov"] = array("name"=>"Петров П.П.", "age"=>"34", "email"=>" petrov@gmail.com");
$A["Sidorov"] = array("name"=>"Сидоров С.С.", "age"=>"47", "email"=>" sidorov@gmail.com");
?>Многомерные массивы похожи на записи в языке Pascal или структуры в языке C.
Доступ к элементам многомерного ассоциативного массива осуществляется следующим образом:
echo $A["Ivanov"]["name"]; // Выводит Иванов И.И.
echo $A["Petrov"]["email"]; // Выводит petrov@gmail.comКак вы уже заметили, для создания многомерного ассоциативного массива мы использовали специальную функцию array.
Ассоциативные многомерные массивы можно создавать и классическим способом, хотя это не так удобно:
<?php
// Многомерный ассоциативный массив
$A["Ivanov"]["name"]="Иванов И.И.";
$A["Ivanov"]["age"]="25";
$A["Ivanov"]["email"]=" ivanov@gmail.com";
$A["Petrov"]["name"]="Петров П.П.";
$A["Petrov"]["age"]="34";
$A["Petrov"]["email"]=" petrov@gmail.com";
$A["Sidorov"]["name"]="Сидоров С.С.";
$A["Sidorov"]["age"]="47";
$A["Sidorov"]["email"]=" sidorov@gmail.com";
// Получаем доступ к ключам многомерного ассоциативного массива
echo $A["Ivanov"]["name"]."<br>"; // Выводит Иванов И.И.
echo $A["Sidorov"]["age"]."<br>"; // Выводит 47
echo $A["Petrov"]["email"]."<br>"; // Выводит petrov@gmail.com
?>
3.6 Функции и применение
Функции PHP и их применение
Если говорить простым языком, то функция — это блок кода, который может быть именован и вызван повторно. Иногда функцию ещё называют подпрограммой. Мы привыкли, что обычной переменной можно присвоить число, строку или массив, а затем получить его обратно, обратившись к значению по имени переменной. Функции устроены похожим образом. Это тоже своего рода переменная, только вместо строки или числа в ней хранится блок кода, который вызывается при использовании этой «переменной».
Функция — очень мощный инструмент повторного использования кода. Создав свою функцию и записав туда необходимый код, вы сможете вызывать и использовать его столько раз, сколько необходимо. В противном случае пришлось бы копировать и вставлять фрагмент кода каждый раз, когда он понадобится.
Чтобы упростить себе работу, мы можем оформить в виде функции некоторую часть кода, которая используется в сценарии несколько раз. Затем, вместо копирования и вставки этой части кода, будет достаточно только вызывать эту функцию, как если бы мы обращались к переменной.
Разделяют два типа функций — встроенные и пользовательские.
Встроенные функции
Встроенные функции — это функции, которые за нас уже написали создатели языка программирования, и мы можем просто брать их и использовать. В PHP существуют тысячи готовых функций на все случаи жизни!
Одна из таких, уже очень хорошо знакомых нам функций — это функция, которая выводит переданный ей текст на экран — print()
Пользовательские функции
Пользовательские функции программист создает самостоятельно. Эти функции, как правило, используются только внутри одного проекта или, даже, сценария.
Анатомия функций
Как и с обычными переменными, работа с функциями состоит из их объявления и использования.
Перед тем, как использовать новую функцию, следует её объявить:<?php
function <имя функции>(<аргумент функции>) {
<тело функции>
return <результат выполнения функции>;
}
Пояснить все составные части функции проще всего на примере.
Допустим, на своём сайте мы хотим показывать, является ли выбранный пользователем год високосным. Для этого напишем функцию, в которую передаётся год. В результате работы функции мы хотим получить значение «истина», если год високосный, и «ложь» — если нет.
Определение такой функции:<?php
function is_leap_year($year) {
if ($year % 4 != 0 ) {
return false;
}
elseif ($year % 100 == 0 ) {
if ($year % 400 == 0) {
return true;
}
else {
return false;
}
}
else {
return true;
}
}
Пример использования функции:
<?php
$year = 2034;
if (is_leap_year($year)) {
print("2034 год - простой");
}
else {
print ("2034 год - високосный");
}
Аргументы функции и область видимости
Наша функция умеет вычислять, является ли переданный год високосным.
Важно понимать, что функция — это как бы программа в программе. Это значит, что внутри такой функции не будут доступны переменные, которые определялись за её пределами. Чтобы передать внутрь функции информацию извне, нужно использовать аргументы функции.Аргументы функции — это переменные, которые функция может получить из внешнего кода. В примере с is_leap_year такая переменная была только одна — $year.
Аргументы необходимы, так как функция «не видит» переменные, определённые за её границами. Поэтому нужные переменные надо передавать ей явно.
Верно и обратное — переменные, определённые внутри функции, не будут доступны извне. Такие переменные называются локальными, потому что они локальны по отношению к функции.В отличие от аргументов, которых может быть несколько, вернуть во внешний код функция может только одно значение — с помощью инструкции «return» (возврат). Возвращаемое значение называют результатом работы функции.
3.7 POST и GET запросы
Что такое HTTP?
Протокол HTTP предназначен для обеспечения связи между клиентами и серверами.
HTTP работает как протокол запроса-ответа между клиентом и сервером.
Веб-обозреватель может быть клиентом, а приложение на компьютере, на котором размещается веб-узел, может быть сервером.
Пример: клиент (обозреватель) отправляет HTTP-запрос на сервер; Затем сервер возвращает ответ клиенту. Ответ содержит сведения о состоянии запроса, а также может содержать запрошенное содержимое.
Два метода HTTP-запроса: Get и POST
Два часто используемых метода запроса-ответа между клиентом и сервером: Get и POST.
- GET - Запрашивает данные из указанного ресурса
- POST - Отправка данных для обработки в указанный ресурс
Метод GET
Обратите внимание, что строка запроса (пары «имя-значение») отправляется в URL-адрес запроса GET:
/test/demo_form.php?name1=value1&name2=value2
Некоторые другие заметки о запросах GET:
- GET запросы могут кэшироваться
- GET запросы остаются в истории браузера
- GET запросы могут быть закладками
- GET запросы никогда не должны использоваться при работе с конфиденциальными данными
- GET запросы имеют ограничения по длине
- GET запросы должны использоваться только для извлечения данных
Метод POST
Обратите внимание, что строка запроса (пары «имя-значение») отправляется в теле HTTP-сообщения запроса POST:
POST /test/demo_form.php HTTP/1.1
Host: html5css.ru
name1=value1&name2=value2Некоторые другие примечания по запросам POST:
- POST запросы никогда не кэшируются
- Запросы POST не сохраняются в журнале обозревателя
- Запросы POST не могут быть закладками
- Запросы POST не имеют ограничений по длине данных
GET
POST
Кнопка возврата/перезагрузка
Безвредны
Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные будут повторно отправлены)
Закладка
Можно закладка
Не может быть Закладка
Кэшированные
Может кэшироваться
Не кэшируется
Тип кодировки
application/x-www-form-urlencoded
application/x-www-form-urlencoded or multipart/form-data. Использование многокомпонентной кодировки для двоичных данных
Истории
Параметры остаются в журнале обозревателя
Параметры не сохраняются в журнале обозревателя
Ограничения по длине данных
Да, при отправке данных метод Get добавляет данные в URL-адрес; и длина URL ограничена (максимальная длина URL составляет 2048 символов)
Без ограничений
Ограничения типа данных
Разрешены только символы ASCII
Никаких ограничений. Двоичные данные также разрешены
Безопасности
Get менее безопасен по сравнению с POST, поскольку отправляемые данные являются частью URL-адреса
POST немного безопаснее, чем Get, поскольку параметры не сохраняются в журнале обозревателя или в журналах веб-сервера
Видимость
Данные видны всем в URL
Данные не отображаются в URL-адресе
3.8 Знакомство PhpMyAdmin
phpMyAdmin
Данная утилита позволяет нам работать с сервером баз данных MySQL. А если быть точнее, то phpMyAdmin позволяет:
- Создавать базу данных
- Создавать таблицы в базе данных
- Добавлять, удалять и редактировать данные в табицах
- Осуществлять поиск данных
- Устанавливать привилегии на базу данных, таблицу
- Делать бекап и восстанавливать базу данных
- И многое другое
Т.е. phpMyAdmin позволяет делать первоначальные настройки базы данных и ее содержимого. А теперь обо всем этом подробно.
Установка phpMyAdmin
phpMyAdmin представляет собой набор html, css, javascript и php файлов — это небольшой сайт, который управляет MySQL. Установка phpMyAdmin представляет собой обычное копирование файлов на Ваш web-сервер. После того, как мы установили phpMyAdmin в адресной строке браузера набираем адрес <Ваш сайт>/phpMyAdmin и попадаем в окно авторизации phpMyAdmin
В поле “Пользователь” вводим root, а в поле “Пароль” вводи пароль, который Вы установили для root пользователя при установке MySQL.
Интерфейс phpMyAdmin
После прохождения авторизации мы попадаем в главное окно
В левой части мы видим ссылки для быстрого перехода:
Ниже них расположены названия баз данных, которые находятся на сервер MySQL. Тут будьте внимательны базы: information_shema, mysql, perfomance_shema — это = служебные базы данных и если Вы не знаете, за что они отвечают, то лучше их не трогать. В правой части или основной вверху мы видим меню
ниже этого меню мы видим:
1. Окно основных настроек
2. Окно настроек внешнего вида
3. Информационное окно о сервере баз данных
4. Информационное окно о WEB-сервере
5. Информационное окно о phpMyAdmin
Создание базы данных при помощи phpMyAdmin
Для того чтобы приступить к созданию базы данных перейдем в меню “Базы данных”
В поле вводим название базы данных и жмем “Создать”
Удаление базы данных
Для того, чтобы удалить базу данных необходимо в окне баз данных выбрать необходимую базу данных и нажать “Удалить"
И тут мы увидим еще одну замечательную особенность phpMyAdmin, которая понравиться для тех, кто только изучает SQL-язык: phpMyAdmin показывает нам запрос.
Для удаления базы данных необходимо подтвердить запрос.
Работа с базой данных через phpMyAdmin
Для того, чтобы приступить к работе с базой данных необходимо зайти в нее. Для этого Вы можете в левой части перейти к необходимой базе данных. Или в окне баз данных щелкнуть по ссылке необходимой базы данных
Давайте создадим таблицу test в нашей базе данных. Для этого в окне нашей базы данных в поле введем название таблицы, а в поле количество столбцов поставим, например, 2 и нажмем “Вперед”
В следующем окне нам предложат заполнить данные о столбцах:
1. Имя — имя столбцаТакже мы должны указать тип столбцов.
2. Тип — тип столбца
3. Длина — длина столбца
4. По умолчанию — значение, которое будет подставлено по умолчаню, если Вы это указали
5. Сравнение — как будет осуществляться поиск данных
6. Атрибуты — атрибуты столбца
7. Null — может ли столбец быть пустым
8. Индекс — индекс поля
9. A_I — является ли данный столбец с автоматическим приращением
10. Комментарий — комментарий к данному столбцу
После ввода всех необходимых данных жмем “Сохранить”
Мы видим, что появилась наша таблица
Теперь мы можем:
1. выполнить SQL-запрос — это делается в меню “SQL”
2. осуществить поиск данных в нашей базе — это делается в меню “Поиск”
3. можем осуществить запрос по шаблону, который можно сделать в меню “Запрос по шаблону”
4. Экспортировать данные базы в различные форматы — это делается в меню “Экспорт”
5. Импортировать данные в базу в меню “Импорт”
6. Установить привилегии на базу данных: создать пользователей для данной базы и настроить их доступ к данным — это выполняется в меню “Привилегии”
7. Можем удалить таблицу. Для выбрать необходимую таблицу и нажать “Удалить”Работа с данными
Для того, чтобы приступить к работе с данными нам необходимо зайти в таблицу с данными, которой мы хотим работать. Чтобы попасть в необходимую таблицу надо перейти по ссылке с названием данной таблицы.
После чего мы увидим структуру данной таблицы
Для того, чтобы добавить данные в таблицу необходимо перейти в меню “Вставить” и приступить к добавлению данных. А вообще данные в таблице мы можем:
1. Просматривать.
2. Добавлять.
3. Удалять.
4. Изменять.
5. Копировать.
6. Осуществлять поиск по различным критериям.Добавление пользователя
В phpMyAdmin мы мжем добавлять пользователей, назначая им определенные привилегии. Пользователя мы можем создать как для сервера баз данных целиком, так и для отдельной базы данных. Давайте на примере нашей тестовой базы данных test создадим пользователя и назначим ему определенные привилегии. Для этого перейдем в нашу базу данных test и в меню жмем привилегии.
В следующем окне жмем “Добавить пользователя”
В следующем окне заполняем все поля:
1. Имя пользователя — логинПосле заполнения всех полей жмем “Добавить пользователя”
2. Хост — выбираем ограничение доступа: с любой машины, с локальной машины, использовать таблицу хостов или использовать текстовое поле.
3. Пароль — вводим пароль для данной учетной записи (если Вы генерируете пароль, то ничего вводить не надо)
4. Подтверждение — повторяем пароль
5. Создать пароль — при нажатии на кнопку “Генерировать” phpMyAdmin автоматически сгенерирует пароль
Если пользователь успешно добавлен, то Вы увидите следующее окно
Для изменения привилегий жмем “Редактирование привилегий” напротив необходимого пользователя.
3.9 Основы SQL
СУБД
Система управления базами данных (СУБД) — это отдельная программа, которая работает как сервер, независимо от PHP.
Создавать свои базы данных, таблицы и наполнять их данными можно прямо из этой же программы, но для выполнения этих операций прежде придётся познакомиться с ещё одним языком программирования — SQL.SQL
SQL или Structured Query Language (язык структурированных запросов) — язык программирования, предназначенный для управления данными в СУБД. Все современные СУБД поддерживают SQL.
На языке SQL выражаются все действия, которые можно провести с данными: от записи и чтения данных, до администрирования самого сервера СУБД.
Для повседневной работы совсем не обязательно знать весь этот язык; достаточно ознакомиться лишь с основными понятиями синтаксиса и ключевыми словами. Кроме того, SQL очень простой язык по своей структуре, поэтому его освоение не составит большого труда.Язык SQL — это в первую очередь язык запросов, а кроме того, он очень похож на естественный язык.
Каждый раз, когда требуется прочитать или записать любую информацию в БД, требуется составить корректный запрос. Такой запрос должен быть выражен в терминах SQL.Например, чтобы вывести на экран все записи из таблицы города, составим такой запрос:
ПРОЧИТАТЬ всё ИЗ ТАБЛИЦЫ 'города'
Если перевести этот запрос на язык SQL, то корректным результатом будет:
SELECT * FROM `cities`
Теперь напишем запрос на добавление в таблицу города нового города:
ВСТАВЬ В ТАБЛИЦУ `города` (`имя города`) СО ЗНАЧЕНИЕМ ('Санкт-Петербург')
Перевод на SQL:
INSERT INTO `cities` (`name`) VALUES (‘Санкт-Петербург’)
Эта команда создаст в таблице ‘города’ новую запись, где полю ‘имя города’ будет присвоено значение ‘Санкт-Петербург’.
С помощью SQL можно не только добавлять и читать данные, но и:
- удалять и обновлять записи в таблицах;
- создавать и редактировать сами таблицы;
- производить операции над данными: считать сумму, получать самое большое или малое значение, и так далее;
- настраивать работу сервера СУБД.
3.10 Основы объектного ориентированного программирования
ООП
Объектно-ориентированное программирование (ООП) – это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Класс – это шаблон, описание ещё не созданного объекта. Класс содержит данные, которые описывают строение объекта и его возможности, методы работы с ним.
Объект — экземпляр класса. То, что «рождено» по «чертежу», то есть по описанию из класса.
В качестве примера объекта и класса можно привести технический чертёж для изготовления детали — это класс. Выточенная же на станке по размерам и указаниям из чертежа деталь – объект.
Появление объектно-ориентированного программирования стало результатом возросших требований к функционалу программ, когда описывать объект приходилось раз за разом в разных участках кода. Тогда и было введено понятие класса, параметры которого задавались единожды, а после в коде оставлялись только ссылки на класс, чтобы код самостоятельно «собрал» объект.
Понятие абстракции в ООП
Абстракция — это придание объекту характеристик, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов.
Такой подход позволяет работать непосредственно с объектом, не вдаваясь в подробности, из чего же он состоит и как работает.
Три основных принципа ООП
Объектно-ориентированное программирование базируется на трёх основных принципах – инкапсуляция, полиморфизм, наследование. Рассмотрим их подробнее:
Инкапсуляция
Инкапсуляция — свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (что у него внутри?), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные. При этом пользователю предоставляется только спецификация (интерфейс) объекта.
Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public. Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected, internal.
Пример использования инкапсуляции в языке С++:
class A
{
public:
int a, b; //данные открытого интерфейса
int ReturnSomething(); //метод открытого интерфейса
private:
int Aa, Ab; //скрытые данные
void Do_Something(); //скрытый метод
};
Класс А инкапсулирует свойства Aa, Ab и метод Do_Something(), представляя внешний интерфейс ReturnSomething, a, b.
Инкапсуляцию применяют:
- когда нужно сохранить некоторый участок кода без изменений со стороны пользователя;
- когда нужно ограничить доступ к коду – в связи с уникальностью используемых техник, которые автор хочет оставить «при себе»;
- когда изменение кода повлечёт за собой неработоспособность программы или её взлом.
Наследование
Наследование — способность в объектно-ориентированном программировании построить новый класс на основе уже заданного. При этом функционал может как полностью совпадать, так и отличаться. Класс-донор называется в таком случае родительским или базовым, а его «потомок» — наследником, дочерним классом. Наследование требует определения ещё одного понятия:
Прототип — объект-образец, на основе которого «рождаются» другие объекты, полностью копируя его или изменяясь в процессе. При изменении в прототипе в копиях также происходят соответствующие изменения.
Наследование можно сравнить с рождением ребенка, когда новый человек наследует “свойства” своих родителей, но в то же время не является точной копией одного из родителей.
Полиморфизм
Полиморфизм — способность объектов самим определять, какие методы они должны применить в зависимости от того, где именно в коде они находятся. То есть, объект может изменяться в зависимости от своего местоположения и действовать по-разному, что позволяет не заводить лишних структур. Иначе говоря: один интерфейс — множество решений.
Полиморфизм позволяет понизить процент повторного использования кода и сократить тем самым размер программы и временные затраты на её написание.
3.11 Ведение Model View Controller
MVC
Model-View-Controller (MVC) — это архитектурный шаблон, который разделяет приложение на три основных логических компонента: модель , представление и контроллер. Каждый из этих компонентов создан для обработки определенных аспектов разработки приложения. MVC является одной из наиболее часто используемых отраслевых сред разработки веб-приложений для создания масштабируемых и расширяемых проектов.
Компоненты MVC
Ниже приведены компоненты MVC —
Модель
Компонент Model соответствует всей логике, связанной с данными, с которой работает пользователь. Это может представлять либо данные, которые передаются между компонентами View и Controller, либо любые другие данные, связанные с бизнес-логикой. Например, объект Customer будет извлекать информацию о клиенте из базы данных, манипулировать ею и обновлять данные обратно в базу данных или использовать ее для визуализации данных.
Представление
Компонент View используется для всей логики пользовательского интерфейса приложения. Например, представление Customer будет включать все компоненты пользовательского интерфейса, такие как текстовые поля, раскрывающиеся списки и т. Д., С которыми взаимодействует конечный пользователь.
Контроллер
Контроллеры действуют как интерфейс между компонентами Model и View для обработки всей бизнес-логики и входящих запросов, манипулирования данными с использованием компонента Model и взаимодействия с представлениями для получения окончательного результата. Например, контроллер клиента будет обрабатывать все взаимодействия и входные данные из представления клиента и обновлять базу данных, используя модель клиента. Тот же контроллер будет использоваться для просмотра данных клиента.
3.12 Разработка API
API
Аббревиатура API расшифровывается как «Application Programming Interface» (интерфейс программирования приложений, программный интерфейс приложения). Большинство крупных компаний на определённом этапе разрабатывают API для клиентов или для внутреннего использования. Чтобы понять, как и каким образом API применяется в разработке и бизнесе, сначала нужно разобраться, как устроена «всемирная паутина».
Всемирная паутина и удалённые серверы
WWW можно представить как огромную сеть связанных серверов, на которых и хранится каждая страница. Обычный ноутбук можно превратить в сервер, способный обслуживать целый сайт в сети, а локальные серверы разработчики используют для создания сайтов перед тем, как открыть их для широкого круга пользователей.
При введении в адресную строку браузера www.facebook.com на удалённый сервер Facebook отправляется соответствующий запрос. Как только браузер получает ответ, то интерпретирует код и отображает страницу.
Каждый раз, когда пользователь посещает какую-либо страницу в сети, он взаимодействует с API удалённого сервера. API — это составляющая часть сервера, которая получает запросы и отправляет ответы.
Большинство современных веб-приложений предоставляют API, которые клиенты могут использовать для взаимодействия с приложением. Качественно спроектированный API должен поддерживать следующее:
- Независимость от платформы. Любой клиент должен иметь возможность вызывать API, независимо от того, как API реализован внутренне. Для этого требуется использование стандартных протоколов, а также наличие механизма, при котором клиент и веб-службы могут согласовать формат данных для обмена.
- Развитие службы. Веб-API должен иметь возможность развиваться и расширять набор функций независимо от клиентских приложений. По мере развития API имеющиеся клиентские приложения должны продолжать работать без изменений. Все функции должны быть доступными, чтобы клиентские приложения могли полноценно их использовать.
API в веб-приложениях на примерах
Некое приложение – например, Github – имеет свой API, которым могут воспользоваться другие разработчики. То, как они будут пользоваться им зависит от возможностей, которые предоставляет API и от того, насколько хорошо работает фантазия у разработчиков. API Гитхаба позволяет, например, получать информацию о пользователе, его аватаре, читателях, репозиториях и множество других полезных и интересных сведений.
Если взять, к примеру, API Твиттера, то интерфейс этого сервиса может выдать вам информацию о твитах пользователя, его читателях и о тех, кто его читает, и так далее. Это лишь малая часть возможностей, которые любой желающий может воплотить, используя API стороннего сервиса или создавая свой собственный.
На основе API строятся такие вещи, как карты 2GIS, всевозможные мобильные и десктопные клиенты для Twitter и Vkontakte. Все их функции стали возможными именно благодаря тому, что соответствующие сервисы имеют качественные и детально документированные API.
Стандартный запрос данных от стороннего API выглядит примерно так:
curl
https://api.github.com/users/FreikaНа случай, если кто-то еще не знает, стоит заметить, что curl не имеет никакого отношения к API и используется в операционных системах для отправки и получения данных через терминал. Более подробно на Википедии.
Подобным образом можно посылать запрос на любом языке, в том числе и на Ruby. Ответом на запрос будет примерно такая информация:
{
:
"Freika",
: 3738638,
:
" https://avatars.githubusercontent.com/u/3738638?v=3",
:
"",
:
"https://api.github.com/users/Freika ",
:
"https://github.com/Freika ",
:
"https://api.github.com/users/Freika/followers ",
:
"https://api.github.com/users/Freika/following{/other_user }",
:
"https://api.github.com/users/Freika/gists{/gist_id }",
:
"https://api.github.com/users/Freika/starred{/owner}{/repo }",
:
"https://api.github.com/users/Freika/subscriptions ",
:
"https://api.github.com/users/Freika/orgs ",
:
"https://api.github.com/users/Freika/repos ",
:
" https://api.github.com/users/Freika/events{/privacy}",
:
"https://api.github.com/users/Freika/received_events ",
:
"User",
:
false,
:
"Evgeniy",
:
"",
:
" http://frey.su/",
:
"Barnaul",
:
"",
:
true,
: null,
: 39,
: 13,
: 15,
: 21,
:
"2013-03-01T13:48:52Z",
:
"2014-12-15T13:55:03Z"
}Как видно из блока выше, ответ содержит логин, аватар, ссылку на профиль на сайте и в API, статус пользователя, количество публичных репозиториев и прочую полезную и интересную информацию.
3.13 JQuery
jQuery — это JavaScript Framework, созданная для упрощения взаимодействия с элементами DOM, событиями, технологией AJAX (позволяющая общаться с сервером без перезагрузки страницы)
Добавление JQuery на страницу
JQuery может быть добавлен непосредственно в документ или как внешний файл через тег <script>. Порядок добавления JQuery имеет важное значение: зависимости должны быть включены до скрипта, который с ними связан.
Пример: <script src=”./assets/js/jquery.js”></script>
Синтаксис JQuery
Есть соглашение, которым желательно пользоваться для удобства: названия переменных, которые содержат в себе обернутый набор jQuery, принято начинать с доллара.
Доллар в JavaScript является обычным символом и его можно использовать, где угодно. Можно даже сделать имя функции, состоящее из одного символа $, как это сделано в jQuery.
Если вы хотите записать массив jQuery в переменную, то эту переменную принято начинать с доллара. Это не обязательно, но позволяет с первого взгляда понять, что в этой переменной лежит группа элементов и к этой переменной применимы все методы jQuery.
Получение элементов с помощью JQuery
Для того чтобы понимать как работает селектор Вам все же необходимы базовые знания CSS, т.к. именно от принципов CSS отталкивает селектор jQuery:
- $("#header") — получение элемента с id=«header»
- $(«h3») — получить все <h3>элементы
- $(«div#content.photo») — получить все элементы с классом =«photo» которые находятся в элементе div с id=«content»
- $(«ul li») — получить все <li> элементы из списка <ul>
- $(«ul li:first») — получить только первый элемент <li> из списка <ul>
Вывод текста элемента через jQuery
метод .html() возвращает строку или заменяет html-содержимое каждого выбранного элемента в наборе
Пример: $('#test').html()
Работа с CSS через jQuery
Для работы с CSS в jQuery предусмотрен метод .css(). Первым параметром он принимает имя CSS свойства, а вторым его новое значение.
Пример: $('#test).css('color', red')Если свойство, как это часто бывает в CSS, состоит из нескольких слов, разделенных дефисом, то с этим нет никаких проблем оно записывается так же, как и в CSS:
Пример: $('#test ).css('font size', 20px')Если задать несколько CSS свойств, то для этого можно передать параметром в метод .css() объект, ключами которого будут CSS свойства, а значениями объекта значения CSS свойств:
Пример: $('#test ).css({color: red', font: 12px Arial'})*Однако будут проблемы со свойствами через дефис по типу font size нужно писать не font size, а fontSize, либо взять ключ font size в кавычки
Пример: $('#test ).css({color: red', fontSize: 12px Arial'}) / $('#test ).css({color: red', ‘font size’: 12px Arial'})*команды jQuery можно писать друг за другом в виде цепочки
Пример: $('#test).html('!!!').css('color', red');3.14 Vue
VueJS - это JavaScript-фреймворк для создания пользовательских интерфейсов
Отличие VueJS от остальных JS-фреймворков
ReactJS - низкоуровневая библиотека: производительные приложения, но много дополнительного кода, из-за чего чаще возникает вероятность ошибок и сложность полноценного использования такой производительности
AngularJS - мощный коробочный фреймворк с множеством готовых решений для очень больших корпоративных проектов
VueJS - вобрал лучшие практики от RJS и AJS, более высокая абстракция и на порядок меньше кода за счет эффективных решений на уровне ядра. Хорошо подходит для небольших/средних проектов
Подключение Vue (как библиотеку через CDN)
<script src="”link”"></script> - ссылку (link) нужно брать из документации на оф.сайте Vue, исходя от версии фреймворка (сам по себе Vue это просто объект, с которым можно взаимодействовать
Инициализация приложения
Vue.createApp(объект)
сам объект: { data() { return { ключ : значение } } }
Интерполяция в тег HTML происходит {{ ключ }}, пример: <div>{{ ключ }}</div> (в интерполяции можно использовать
арифметические операции)
Для передачи приложения в HTML нужно использовать метод .mount(селектор)
HTML script.js <body>
<div id=”app”>
<h1>{{ title }}</h1>
</div>
<script src=”linkCDN”></script>
<script src=”script.js”></script>
</body>Vue.createApp({
data() {
return {
title : 'Hello Vue'
}
}
}).mount('#app')
Работа с аттрибутами / Пользовательские события
В аббревиатурах тега для событий Vue подставляют директиву v-директива, дальше указывается аттрибут, а в нем ключ:
v-директива:аттрибут=”ключ”, префикс v-служит для визуального определения Vue-специфичных атрибутов в шаблонах. Синтаксис двойных фигурных скобок не работает с HTML-атрибутами. Используйте вместо него директиву v-bind:
<div v-bind:id="dynamicId"></div> - директива v-bind используется для реактивного обновления атрибутов HTML
Другим примером будет директива v-on, которая отслеживает события DOM: <button v-on:click="метод"> Рассчитать </button> Для обращения к переменной в приложении Vue внутри методов используется this-контекст
Подключение Vue (как проект через Vue CLI (Common Line Interface / интерфейс командной строки))
npm install -g @vue/cli (перед выполнением проверьте установлен ли у вас на компьютере NodeJS, если нет, то установите)
После установки Vue CLI, вы можете сгенерировать свой проект, для этого в терминале прописать:
vue create путь - для создания проекта в текущей папке необходимо вмести пути указать точку, дальше всплывет вопрос “Generate projects in current directory? / Создать проект в текущей папке?” y - да, n - нет
Дальше выбираем готовые сборки или делаем свою (в своей указываем: версию проекта, препроцессоры, linter, взаимодействие с линтером, использование настроек в файлах / package.json, сохранение текущих настроек
После успешного создания проекта, для его запуска нужно прописать в терминале: npm run server
Компоненты
Компонент - это некий HTML код, который мы можем переиспользовать и с помощью параметров настраивать
При создании компонента обязательно помещать теги компонента в тег <template></template>
Глобальное регистрация компонента происходит в файле main.js: import название_компонента from ‘./путь’, подключается к приложению через метод .component()
Локальная регистрация, компонент подключается к другому компоненту внутри тега скрипт через import (как в глобальной регистрации), дальше название компонента указывается в параметрах: export default { components: { название_компонента } }
Vue компонент
<template>
<test-component></test-component>
</template><script>
import TestComponent from ‘. / TestComponent.vue'
export default {components: {TestComponent}}
</script>PROPS и $emit (передача параметров между компонентами)
props - это входные параметры, который передает параметры в компоненты через атрибуты тега. Имена HTML-атрибутов являются регистро-независимыми, поэтому браузеры интерпретируют любые прописные символы как строчные. Это означает, что при использовании шаблонов в DOM входные параметры в camelCase-стиле должны использовать свои эквиваленты в стиле kebab-case (разделённые дефисами):
<test-component post-title="hello!"></test-component> - в родительском компоненте
props: ['postTitle'] - в дочернем компонентеДля передачи данных из дочернего компонента в родительский this.$emit(событие, переменные):
Родительский компонент
<test-component v-on:share-data=”testMethod”></test-component>
methods: { testMethod(data) { console.log(data) } }
Дочерний компонент
<template>
<button v-on:click=”start”></button>
</template>
<script>
export default { methods: { start(event) { this.$emit(‘share-data’, data) } } }
</script>Сокращение кода с помощью ярлыков
Необходимость в v- менее значима при создании одностраничных приложений, где Vue контролирует каждый шаблон. Поэтому есть сокращённая запись для двух наиболее часто используемых директив, v-bind и v-on: