Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
rusldv
7 лет назад

PHP - Урок 9. Массивы и switch. Кодим основной каркас

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>';
    }

А сегодня у меня все. Приятного изучения.


171
656.670 GOLOS
На Golos с November 2016
Комментарии (6)
Сортировать по:
Сначала старые