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

PHP - Урок 11. Функции. Добавляем ядро системы core.php

PHP - Урок 11. Функции. Добавляем ядро системы core.php





Кот программист из Интернета - Источник кота

Предыдущие уроки:



Программируем на PHP - Введение

PHP - Запросы от браузера к серверу

PHP - Как работает сервер

PHP - Урок 4. PHP - интерпретатор

PHP - Урок 5. Переменные сервера и глобальные переменные

PHP - Урок 6. Конструкции print и echo. Кавычки одинарные и двойные и конкатенация строк

PHP - Урок 7. Переменные, константы и условия

PHP - Урок 8. Точка входа в приложение. Настройка mod_rewrite и файл .htaccess

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

PHP - Урок 10. COOKIE


Функции

Тут попробую объяснить это с двух позиций - технической и философской. С технической точки зрения программа рассматривается как код, который вместе с данным может составлять процесс. В любой программе есть условные и безусловные переходы, которые представляют собой переход в определенный адрес кода (его загрузка в указатель инструкций процессора). Все циклы и условия в ваших программах имеют такую же семантику (хотя PHP напрямую и не выполняется процессором, но принцип интерпретатора похожий). В системном программировании бывают еще безусловные переходы. Это просто такие команды, которые в качестве операнда (параметра) принимают некоторый адрес и когда встречаются в коде переходят на этот адрес, могут перейти как назад так и вперед. Могут даже сами на себя, правда это просто подвесит программу и она "застрянет" в этом месте. Так вот. Такие безусловные переходы по сути уже наполовину функции. Но для того чтобы они стали ими в полной мере следует добавить - параметры, передаваемые в код функции - возврат из кода функции Как только эти два свойства добавлены у нас получается функция. Естественно в PHP все уже имеется.

Параметры функции

Технически параметры - это стековые переменные, при вызове функции (переходе в ее код) такие переменные создаются в специальном участке памяти процесса - стеке и удаляются при выходе из функции. Если рассматривать функцию как подпрограмму - то ее параметры - это входные данные подпрограммы. А возвращаемое значение - результат работы подпрограммы (вывод). Локальные переменные не обязательно должны быть параметрами функции. Если переменная не статическая и объявлена внутри функции - то она сама по себе локальная - доступна только внутри этой функции. Вне функции можно объявлять переменные с таким же именем и они будут совершенно разными. Локальные будут указывать на адрес в стеке, а глобальные в области данных процесса, или дополнительной памяти поверх области данных процесса. Параметры же задаются внутри скобок при объявлении функции:
function my_func($par, $par2) {
    echo "Значения переданные в функцию: $par и $par2";
}

Вызов этой функции будет происходить следующим образом: my_func("Привет", "Мир!");

В параметрах функций можно указывать аргументы по умолчанию, но только если после них нет аргументов с неопределенным по умолчанию значением.
Например:

function my_func($par, $par2 = "По умол") {
    echo "Значения переданные в функцию: $par и $par2";
}

В этом случае вызов my_func("Привет"); будет аналогичен my_func("Привет", "По умол");
Естественно в функции модно передавать не только константные значения, но и переменные, хранящие их

$arg = "Привет";
my_func($arg);

Возврат из функции


Показанные выше функции не возвращают значений. Они просто выполняют определенный код. (выводят строку с переданными в функцию параметрами).
Теперь мы просто заменим в коде нашей функции echo на return и вот что получим:

function my_func($par, $par2 = "По умол") {
    return "Значения переданные в функцию: $par и $par2";
}

Теперь наша функция на экран ни чего не выводит. Вместо этого она возвращает сформированную строку в точку вызова функции. Можно представить это как будто вместо имени функции со скобками подставляется ее результат выполнения.
Таким образом мы можем сделать так

$res = my_func("Hello", "World");
echo $res;

или так

echo my_func("Hi", "World");

Философия функций


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

Продолжаем работу с thesite.loc - ядро системы core.php


Ядром у нас будет файл c core.php в котором будут все основные функции нашей системы (по сути библиотека функций).
Для начала создадим папку sys в корневой папке нашего сайта. А затем в ней файл core.php.
Теперь из начала нашего главного файла вырезаем вот этот код

$request = explode("/", $_SERVER["REQUEST_URI"]);
$page = $request[1];
$ext = $request[2];

и добавляем его в sys/core.php, а затем изменяем его (превращаем в функцию).

function route($item = 1) {
    $request = explode("/", $_SERVER["REQUEST_URI"]);
    return $request[$item];
}

Теперь нужно подключить файл sys/core.php в файле index.php

define(ROOT, $_SERVER['DOCUMENT_ROOT']);
require(ROOT.'/sys/core.php');

После такой нехитрой конструкции мы сможем вызывать функции определенные в core.php из index.php и всех ниже подключаемых php-файлов.
Давайте же вызовем нашу функцию роутер:

<h1>Это мое PHP-приложение</h1>
<?php 
    define(ROOT, $_SERVER['DOCUMENT_ROOT']);
    require(ROOT.'/sys/core.php');

    $page = route(1);
    $ext = route(2);
    
    echo 'Запрашиваемая страница: '.$page;
    echo '<br />Дополнительные данные: '.$ext;

Обратившись в браузере к http://thesite.loc/qq/ww (не забываем запустить денвер) мы увидим что все работает. Только теперь мы вынесли код роутера в ядро, а из index.php обращаемся к нему через нашу созданную функцию.
Таким образом мы будем в core.php (и некоторых специальных библиотеках) описывать функции. А уже к ним обращаться из других частей нашего приложения.
Полный код сегодняшнего занятия.

sys/core.php

<?php
/* 
* This core functions for application
*/

/* Route functions */
function route($item = 1) {
    $request = explode("/", $_SERVER["REQUEST_URI"]);
    return $request[$item];
}

index.php

<h1>Это мое PHP-приложение</h1>
<?php 
    define(ROOT, $_SERVER['DOCUMENT_ROOT']);
    require(ROOT.'/sys/core.php');

    $page = route(1);
    $ext = route(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>';
    }


Мы подходим к изучению шаблонов, которые составляют основу MVC. Мы изучим их в одном из следующих уроках.

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