PHP - Урок 9. Массивы и switch. Кодим основной каркас.
Предыдущие уроки:
Программируем на PHP - Введение
PHP - Запросы от браузера к серверу
PHP - Как работает сервер
PHP - Урок 4. PHP - интерпретатор
PHP - Урок 5. Переменные сервера и глобальные переменные
PHP - Урок 6. Конструкции print и echo. Кавычки одинарные и двойные и конкатенация строк
PHP - Урок 7. Переменные, константы и условия
PHP - Урок 8. Точка входа в приложение. Настройка mod_rewrite и файл .htaccess
Массивы
Массивы могут показаться на первый взгляд сложными, но на самом деле тут все просто. Массивы - это такие же переменные, но их можно индексировать. Проще говоря пронумеровать. Проще говоря если бы у нас не было бы в PHP массивов мы бы написали так:$num0 = 3;
$num1 = 5;
$num2 = 7;
$num3 = 2;
Но вместо того чтобы нумеровать много переменных с одинаковым именем (num) сделаем лучше массив
$num[0] = 3;
$num[1] = 5;
$num[2] = 7;
$num[3] = 2;
Как видно разница только в том, что номера переменных в квадратных скобках.
Естественно встает вопрос: Зачем там эти квадратные скобки.
А дело кроется в конструкции под названием циклы. Мы о них пока не говорили.
Однако понятно что цикл - что-то повторяет. Когда в цикле что-то повторяется, в него можно добавить переменную - счетчик повторов (итераций) этого самого цикла, обычно их именуют как $i
и $j
.
Вот эту переменную, указав ей начальный индекс массива (у нас 0) и поместив в скобки переменной массива, мы можем каждую итерацию цикла получать новое значение массива. Как бы обращаясь к переменным перечисляя их номера. За тем с этим значением что-то делать.
for($i=0; $i<4; $i++){
$this_num = $num[$i];
echo $this_num;
}
То есть так удобно, наглядно и не нужно "колдовать" с именами переменных.
Сегодня нам понадобятся массивы вот по какой причине.
В прошлом уроке мы получили из переменной глобального массива $_SERVER['REQUEST_URI'] значение запрашиваемого ресурса.
Как принято это строка разделенная слешами, подразумневая каталоги файловой системы, откуда запрашивается файл.
Однако мы файлы как это делает сервер не будем доставать. А строку будем использовать по-своему.
Но прежде нам ее необходимо разбить в массив по элементам между слешами.
Например, /hello/world
у нас должен стать массивом
$request[1] = "hello";
$request[2] = "world";
Ведь слеши нам не нужны. Они служат в качестве разделителей.
Для того, чтобы разделить так строку в массив используется функция explode():
$request = explode("/", $_SERVER["REQUEST_URI"]);
В итоге в нашем index.php можно написать так:
<h1>Это мое PHP-приложение</h1>
<?php
$request = explode("/", $_SERVER["REQUEST_URI"]);
print_r($request);
Затем набираем в адресной строке http://thesite.loc/hello/world
открываем страницу
Вывод массива таков
Это мое PHP-приложение
Array ( [0] => [1] => hello [2] => world )
Первый (0) элемент массива пустой поскольку в начале разбиваемой строки стоит слеш.
А вот элементы 1 и 2 содержат то что нам нужно. Если вы добавите в адресной строке еще что-то через слеш, то оно появится в 3-ем элементе массива и т.д
Теперь мы можем получать значения запроса через массив $request
.
Так как мы часто будем использовать первые два элемента можно сразу их сохранить в переменных, так более наглядно. А к 3-му и более, если они будут - через массив.
$page = $request[1];
$ext = $request[2];
Запишем это в нашем index.php так
<h1>Это мое PHP-приложение</h1>
<?php
$request = explode("/", $_SERVER["REQUEST_URI"]);
$page = $request[1];
$ext = $request[2];
echo 'Запрашиваемая страница: '.$page;
echo '<br />Дополнительные данные: '.$ext;
И в результате увидим вот что
Это мое PHP-приложение
Запрашиваемая страница: hello
Дополнительные данные: world
А теперь посмотрим что нам с этим делать.
Условный оператор switch
Этот оператор можно считать лаконичной записью условий if.
Про if я рассказа в прошлом уроке. Поэтому сразу разберем switch:
switch(ЗНАЧЕНИЕ_ДЯ_СРАВНЕНИЯ) {
case ВАРИАНТ1:
echo 'ЗНАЧЕНИЕ_ДЯ_СРАВНЕНИЯ равно ВАРИАНТ1';
break;
case ВАРИАНТ2:
echo 'ЗНАЧЕНИЕ_ДЯ_СРАВНЕНИЯ равно ВАРИАНТ2';
break;
case ВАРИАНТ3:
echo 'ЗНАЧЕНИЕ_ДЯ_СРАВНЕНИЯ равно ВАРИАНТ3';
break;
default:
echo 'ЗНАЧЕНИЕ_ДЯ_СРАВНЕНИЯ не равно никакому из вариантов';
break;
}
То есть это оператор условного выбора. Переведя с английского его название - переключатель говорит само за себя.
Именно этот оператор мы будем использовать для создания навигации и управления на нашем сайте.
Итак пишем следующий код
switch($page){
case 'login':
echo '<h2>Страница авторизации</h2>';
break;
case 'logout':
echo '<h2>Тут мы разлогиваемся</h2>';
break;
case 'register':
echo '<h2>Страница авторизации</h2>';
break;
case 'user':
echo '<h2>Профлиь пользователя</h2>';
break;
case 'post':
echo '<h2>Конкретный пост</h2>';
break;
case 'news':
echo '<h2>Страница новостей</h2>';
break;
default:
echo '<h2>Если в запросе указано что-то другое</h2>';
}
Теперь можно переходить на разделы в нашем переключателе например http://thesite.loc/news - у нас будет вывод выбранного нами раздела в переключателе.
Таким образом мы можем добавлять любые нужные нам CASE указывая любые значения для сравнения.
Допустим
...
case 'golos':
echo '<h2>Синхронизация с блокчейном</h2>';
break;
...
И страница будет по адресу thesite.loc/golos
Мы даже можем создать ссылку дя меню <a href="/golos">Синхронизировать с Голосом</a>
но этим мы займемся в уроке про шаблоны.
Полный код сегодняшнего урока:
<h1>Это мое PHP-приложение</h1>
<?php
$request = explode("/", $_SERVER["REQUEST_URI"]);
$page = $request[1];
$ext = $request[2];
//echo 'Запрашиваемая страница: '.$page;
//echo '<br />Дополнительные данные: '.$ext;
switch($page){
case 'login':
echo '<h2>Страница авторизации</h2>';
break;
case 'logout':
echo '<h2>Тут мы разогиваемся</h2>';
break;
case 'register':
echo '<h2>Страница авторизации</h2>';
break;
case 'user':
echo '<h2>Профиь пользователя</h2>';
break;
case 'post':
echo '<h2>Конкретный пост</h2>';
break;
case 'news':
echo '<h2>Страница новостей</h2>';
break;
default:
echo '<h2>Если в запросе указано что-то другое</h2>';
}
А сегодня у меня все. Приятного изучения.
Какой милый кот.. Он Ваш? Он просто учёный..:))
Да Это коты из интернета)
А я то думала Ваш :((
Привет!
Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.
Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧
@rusldv,
пожалуйста, при оформлении статей учитывайте принятую на Голосе традицию давать ссылки на изображения, взятые в Интернет.
Это можно сделать например так:
Источник изображения
Заранее благодарим за сотрудничество.
хорошо спасибо