Перед тем как начать вываливать на Ваши головы ещё одну порцию информации хочу рассказать о новой возможности: если Вы не желаете получать вместе с выпусками нашей рассылки дополнительную кучу рекламы, то можете подписаться на рассылку на нашем сервере. Рассылка для этих подписчиков приходит:
Раньше на пару-тройку часов
Без рекламы
Так как этот сервис пока что тестируется, я заранее приношу свои извинения
за возможные ошибки в доставке писем.
Также позвольте мне исправить ту ошибку, которую я допустил в прошлой чашечке. Цитирую сам себя:Несмотря на явную схожесть, команды require(); и include(); серьёзно различаются: команда require(); выполняется единожды перед началом выполнения скрипта, а команда inlcude(); каждый раз когда встречается в коде и Вы легко можете помещать команду inlcude(); в циклы.
На самом деле в последних версиях PHP
эти команды действуют абсолютно одинаково, вот только в том случае, если включаемый файл не существует, то команда include(); просто сообщает об этом и продолжает выполнять скрипт, в то время как команда require(); вызывает фатальную ошибку и завершает работу скрипта. Подробности обсуждения в нашем форуме.
Сегодня я подробно расскажу о том, как решаются предыдущие домашние задания, а также покажу несколько примеров
по работе с условиями, циклами и командами подключения файлов (include(), require()).
Таблица квадратов
Заданием пятой чашечки было написание скрипта, который выводил бы таблицу квадратов чисел от 3 до 47. Многие из читателей справились с этим заданием, ведь решение было достаточно простым. Вот код, который получился у меня:
Пример 1. Таблица квадратов от 3 до 47:
<html>
<head><title>Таблица квадратов</title>
</head><body>
<table border="1px" cellspacing=1 cellpadding=3>
<tr><td> <em>x</em> </td><td> <em>x<sup>2</sup></em> </td></tr>
<?
// запускаем цикл от 3 до 47
for ($i=3; $i<=47; $i++) {
// находим переменную $k, которая содержит квадрат числа
$k=$i*$i;
// выводим в первой ячейке число, а во-второй — его квадрат
echo("<tr><td>" . $i . "</td><td>" . $k . "</td></tr>");
}
?>
</table>
</body></html>
Как видите, всё легко и просто. Результат работы скрипта должен быть примерно таким:
Рисунок 1. Результат работы примера 1 (сокращён):
Калькулятор
Таким было задание прошлой чашечки, и, судя по письмам, задание оказалось несколько сложнее. Что-ж, посмотрим, как нужно было его решать:
Страшновато, конечно, но ничего, сойдёт. У многих возник вопрос, а что будет известно скрипту, когда пользователь нажмёт кнопку «Вперёд!»? Посмотрим:
Значение первого текстового поля — в переменной $var1
Значение второго текстового
поля — в переменной $var2
И переменная $action, в которой будет значение от 1 до 4 в зависимости от того, что выбрал пользователь.
Вот тут главное не спутать: слова «сложить», «вычесть» и др. — это лишь подписи, которые отображаются в списке. Скрипт о них никогда и не узнает, а узнает он о значении, указанном в свойстве value тега <option>.
Вот как выглядит скрипт calc.php:
Пример 3. Скрипт calc.php:
<?
switch ($action) {
// смотрим, чему же равна переменная $action
case 1:
// 1 — это сложение
echo ($var1 . "+" . $var2 . "=");
// выводим переменную $var1, затем символ
// «+», затем — $var2, затем — «=»
echo ($var1+$var2);
// а потом — результат сложения
// также будет и в остальных действиях
break;
case 2:
// 2 — это вычитание
echo ($var1 . "-" . $var2 . "=");
echo ($var1-$var2);
break;
case 3:
// 3 — это умножение
echo ($var1 . "*" . $var2 . "=");
echo ($var1*$var2);
break;
case 4:
// 4 — это деление
echo ($var1 . "/" . $var2 . "=");
echo ($var1/$var2);
break;
default:
// если вдруг значение переменной $action
// не равно 1, 2, 3 или 4, то выводим ошибку:
echo ("Такого действия я не знаю");
}
?>
Посмотрим, что будет, если мы выберем сложение, а в качестве чисел — две пятёрки:
Рисунок 3. 5+5 равно...:
Итак, скрипт работает идеально. Или не совсем? Вспомните, есть в математике одно правило, а наш калькулятор его не учитывает. Правило это — «На ноль делить нельзя!». Интересно, а что
будет, если всё-таки попытаться?
Рисунок 3. Делить на ноль:
Вот вам и пожалуйста: ошибка. Видать, и вправду нельзя на ноль делить... А жаль. Наша задача — предотвратить подобные ситуации и сделать так, чтобы при попытке деления на ноль вместо непонятного текста появлялось нормальное пояснение. Что делать? Воспользуемся условиями!
Пример 4. Правильный
калькулятор:
<?
switch ($action) {
// смотрим, чему же равна переменная $action
case 1:
// 1 — это сложение
echo ($var1 . "+" . $var2 . "=");
// выводим переменную $var1, затем символ
// «+», затем — $var2, затем — «=»
echo ($var1+$var2);
// а потом — результат сложения
// также будет и в остальных действиях
break;
case 2:
// 2 — это вычитание
echo ($var1 . "-" . $var2 . "=");
echo ($var1-$var2);
break;
case 3:
// 3 — это умножение
echo ($var1 . "*" . $var2 . "=");
echo ($var1*$var2);
break;
case 4:
// 4 — это деление
if ($var2==0) {
echo ("Делить на ноль нельзя!");
} else {
echo ($var1 . "/" . $var2 . "=");
echo ($var1/$var2);
}
break;
default:
// если вдруг значение переменной $action
// не равно 1, 2, 3 или 4, то выводим ошибку:
echo ("Такого действия я не знаю");
}
?>
Пожалуйста! Всё готово. Теперь при попытке деления на ноль Вы увидите что-то такое:
Рисунок 4. Разделить число на ноль не удастся:
А вот пример того, как можно было решить задачу, используя только конструкцию IF:
Пример 5. Тот же калькулятор, но без использования switch:
<?
if ($action==1) {
// 1 — это сложение
echo ($var1 . "+" . $var2 . "=");
// выводим переменную $var1, затем символ
// «+», затем — $var2, затем — «=»
echo ($var1+$var2);
// а потом — результат сложения
// также будет и в остальных действиях
} else {
// если вдруг значение переменной $action
// не равно 1, 2, 3 или 4, то выводим ошибку:
echo ("Такого действия я не знаю");
}
?>
include() и require()
А сейчас я хочу показать несколько примеров с выражениями include() и require(). Вот посмотрите на такой пример (файл inc1.php):
Пример 6. Пример использования include (файл inc1.php):
<?
$a=1;
include ("inc2.php");
?>
А вот код файла inc2.php:
Пример 7. Пример использования include (файл inc1.php):
<?
echo ($a);
?>
Действия PHP:
Присвоит переменной $a значение 1
Подключит скрипт inc2.php
Выведет значение переменной $a (то есть 1)
Как правило, при создании сайта некоторые функции, что должны быть доступны по всему сайту, чтобы не копировать в каждый файл заново, выносят в отдельный файл, который подключают с помощью команды include() или require().
Простой сайт
А сейчас, на
основе тех команд, что мы уже изучили попытаемся сделать простой шаблон для сайта. Основным скриптом сайта будет файл с именем index.php. Что в нём должно быть:
Вывод шапки сайта
Вывод той страницы, которую запросил пользователь
Вывод сообщения об ошибке, если такой страницы не существует
Вывод низа сайта
Шапку и низ сайта мы будем держать в двух файлах: top.php и bottom.php, а содержимое страниц будет находиться в файлах, которые мы расположим в папке text
и будем брать их оттуда.
Как определить, какая страница нужна пользователю? Каждая страница нашего сайта будет иметь такой адрес: http://www.site.ru/index.php?page=название_страницы, значит уже в самом начале работы скрипту будет известна переменная с именем $page. Она и будет содержать адрес нужной страницы.
Пример 8. Простейший шаблонизатор. Файл index.php:
<?
include_once ("top.php");
// подключаем шапку сайта (только один раз)
if (!$page) $page="index";
// если страница явно не указана, то это главная страница
if (file_exists("text/" . $page . ".php")==FALSE) $page="404";
// это поясним подробнее: функция file_exists (ИМЯ ФАЙЛА)
// говорит нам, существует файл с таким именем, или нет
// В условии сказано: если файл не существует (функция возвращает
// FALSE), то в качестве страницы берём файл с текстом ошибки 404
// имя проверяемого файла: "text/" . $page . ".php"
include ("text/" . $page . ".php");
// подключаем саму страницу
include_once ("bottom.php");
// подключаем низ сайта (только один раз)
?>
Теперь всё, что осталось сделать — это создать файлы top.php и bottom.php, а также все файлы всех страниц сайта. Это достаточно просто. Если же у Вас возникают какие-то сложности, то Вы легко можете скачать пример такого сайта.
Ну, на сегодня у меня всё. Если что не так — пишите!