Пишем калькулятор на PHP
Всем привет! Мы с вами изучили 2 типа запросов: GET и POST. Они позволяют нам отправлять данные на сервер, благодаря чему мы можем с ним «общаться». Мы рассмотрели несколько простейших примеров. В этом уроке для закрепления материала мы с вами напишем свой калькулятор!
Прежде чем приступить к его созданию, давайте обговорим то, что он должен уметь. Пусть наш калькулятор будет принимать на вход 2 числа, и операцию, которую над этими числами нужно совершить (сложение, вычитание, умножение, деление). После этого он будет выводить нам получившееся выражение и его результат.
Итак, вот так будет выглядеть форма для ввода исходных данных:
А вот так будет выглядеть страница с результатом:
Давайте теперь спроектируем, где что будет лежать. Я предлагаю сделать такую архитектуру:
- index.php – здесь будет храниться форма, в которой мы будем заполнять исходные данные
- result.php – здесь будет храниться шаблон, который будет выводить результат вычислений
- calc.php – файл, в котором будет храниться непосредственно вся бизнес-логика нашего приложения.
Шаблоны калькулятора
Итак, приступим. Давайте начнём с формы. Она будет содержать в себе:
- 2 input’а, в которые мы будем записывать аргументы;
- select, который позволит нам выбрать одну из доступных операций;
- кнопку, для отправки формы.
Я приведу здесь пример формы, в которой будет только две возможные операции: сложение и вычитание.
<html>
<head>
<title>Калькулятор</title>
</head>
<body>
<form action="/result.php">
<input type="text" name="x1">
<select name="operation">
<option value="+">+</option>
<option value="-">-</option>
</select>
<input type="text" name="x2">
<input type="submit" value="Посчитать">
</form>
</body>
</html>
Здесь вам всё должно быть знакомо. Если нет — повторите уроки с формами в курсе HTML.
Мы видим, что данная форма отправляет GET-запрос на адрес /result.php. Как мы уже решили, там будет находиться шаблон для вывода результата вычислений.
Вот пример кода, который получился у меня:
<?php
$result = require __DIR__ . '/calc.php';
?>
<html>
<head>
<title>Калькулятор</title>
</head>
<body>
<b>Результат вычислений:</b>
<br>
<?= $result ?>
</body>
</html>
Как видим, здесь всё предельно просто — в переменную $result присваивается значение, возвращаемое из файла calc.php. Затем мы просто-напросто выводим результат из этой переменной.
Бизнес-логика калькулятора
Теперь самое интересное — написать бизнес-логику. Создаём файл calc.php и начинаем думать.
Первое, в чём нам стоит убедиться, есть ли вообще какие-либо данные в GET-запросе. Для этого проверяем массив $_GET на пустоту:
<?php
if (empty($_GET)) {
return 'Ничего не передано!';
}
Сейчас, если перейти по адресу http://myproject.loc/result.php, мы увидим соответствующий результат:
Далее, нам стоит проверить, что из формы переданы x1, x2 и operation.
<?php
if (empty($_GET)) {
return 'Ничего не передано!';
}
if (empty($_GET['operation'])) {
return 'Не передана операция';
}
if (empty($_GET['x1']) || empty($_GET['x2'])) {
return 'Не переданы аргументы';
}
Можно теперь вернуться на форму с исходными данными и заполнить её какими-нибудь данными:
Если теперь нажать на кнопку отправки формы, мы увидим, что никаких ошибок в форме результата теперь не возникло:
Вместо этого мы теперь видим число 1. Это результат того, что в файле calc.php мы ничего не вернули, но при этом попытались это «ничего» с помощью функции require присвоить в переменную $result. Единица вернулась нам, потому что файл был успешно подключен, но ничего не вернул. Это значение по умолчанию.
Попробуем теперь убрать один из аргументов в форме:
Если мы отправим запрос сейчас, то увидим соответствующую ошибку:
Ну что, теперь мы знаем, что данные у нас проверяются, можно с ними и поработать.
Давайте для удобства сделаем 2 переменные $x1 и $x2 и положим в них значения из GET-запроса.
//… продолжение файла
$x1 = $_GET['x1'];
$x2 = $_GET['x2'];
Давайте теперь составим выражение, которое мы будем вычислять. Его мы просто будем выводить для наглядности.
//… продолжение файла
$x1 = $_GET['x1'];
$x2 = $_GET['x2'];
$expression = $x1 . ' ' . $_GET['operation'] . ' ' . $x2 . ' = ';
return $expression;
Теперь вернёмся на форму и снова введём корректные аргументы. После этого отправим её и увидим, что на странице с результатом появилось выражение, результат которого мы будем считать.
Дело осталось за малым — нужно только посчитать результат.
Для того, чтобы определить, какое действие нужно совершить с аргументами, воспользуемся конструкцией switch-case.
В результате получаем такое содержимое calc.php.
<?php
if (empty($_GET)) {
return 'Ничего не передано!';
}
if (empty($_GET['operation'])) {
return 'Не передана операция';
}
if (empty($_GET['x1']) || empty($_GET['x2'])) {
return 'Не переданы аргументы';
}
$x1 = $_GET['x1'];
$x2 = $_GET['x2'];
$expression = $x1 . ' ' . $_GET['operation'] . ' ' . $x2 . ' = ';
switch ($_GET['operation']) {
case '+':
$result = $x1 + $x2;
break;
case '-':
$result = $x1 - $x2;
break;
default:
return 'Операция не поддерживается';
}
return $expression . $result;
Давайте теперь снова отправим форму и посмотрим на результат.
Получили простейший калькулятор, который умеет складывать и вычитать. Разумеется, это лишь простейший прототип. Довести его до ума вы сможете сами, а в домашнем задании вас ждут наводящие вопросы, которые помогут найти ошибки, содержащиеся в приведенном коде.
Комментарии