PHP5 - Урок 6
Итак, Вы уже начали программировать ...
Пора подумать, где же хранить результаты своих трудов.
Пора в этом деле навести хоть какой-то порядок!
Будем сохранять скрипты (и всякие там "куски кода") в отдельных
файлах (которые будем называть библиотеками кода).
Потом мы сможем использовать эти библиотеки в различных сценариях.
Давайте присваивать этим файлам расширения .inc и хранить их где-нибудь
"подальше" от конечного пользователя. Заведите для них папку LIB.
(У меня, например, они хранятся в D:\WWW\PHP5\LIB\).
1. Конструкции include и require - это два основных способа включения
файлов в сценарий PHP. Основное различие между этими способами состоит
в том, что require выводит сообщение об ошибке, когда не может найти
файл, а include "ограничивается" предупреждением.
Обычно, страницы в Web-приложениях выглядят очень похоже. Выделим
"нечто" общее на этих страницах и сделаем два файла, которые потом
включим в наш сценарий :
Текст ниже поместите в файл page_top.inc, а сам файл в папку ...\LIB
Код
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body>
<p align="center">
<font size="14">Мой это Сайт, короче!</font>
</p>
<br/>
<hr width="80%" size="1"/>
Текст ниже поместите в файл page_bottom.inc, а сам файл в папку ...\LIB
Код
<br/>
<hr width="80%" size="1"/>
<p align="center">
<font size="3">
<b>Copyright (c) 2008 Вася Иванов в общем ... наверное ...</b>
</font>
</p>
</body>
</html>
А теперь напишите сценарий и выполните его :
(Пути к файлам я пишу "как у меня". Вы свои пропишите, разумеется!)
Код
<?php
$page_title = "Привет! Это главная страница.";
require ("D:\WWW\PHP5\LIB\page_top.inc");
?>
<p align="center">
<font size="5">
Тут пишем всякую ерунду, которую искренне считаем
<br/><br/>
<b>Содержанием Главной Страницы!</b>
<br/>
</font>
</p>
<?php
require ("D:\WWW\PHP5\LIB\page_bottom.inc");
?>
2. Включаемые файлы (так часто называют то, что мы рассматривали выше)
могут содержать другие включаемые файлы. При этом могут возникать
ошибки, если на какой-то включаемый файл ссылаются многократно.
От этих ошибок можно застраховаться, используя аналоги конструкций
include и require, соответственно, include_once и require_once.
Эти аналоги запоминают, какие файлы были уже загружены.
Так что, предпочтительнее использовать именно их!
Перепишите последний сценарий и выполните его :
Код
<?php
$page_title = "Привет! Это главная страница.";
require_once ("D:\WWW\PHP5\LIB\page_top.inc");
?>
<p align="center">
<font size="5">
Тут пишем всякую ерунду, которую искренне считаем
<br/><br/>
<b>Содержанием Главной Страницы!</b>
<br/>
</font>
</p>
<?php
require_once ("D:\WWW\PHP5\LIB\page_bottom.inc");
?>
3. Константы являются способом связывания скалярного значения
со строковым идентификатором. Константы определяют с помощью
конструкции define, которая получает строку для имени константы
и скалярное выражение. Затем define создает эту костанту.
Имена констант подчиняются тем же правилам, что и имена переменных,
но они не должны начинаться со знака доллара! Значения констант
могут быть только 4-х типов : integer, float, string и Boolean.
В отличие от переменной константу ИЗМЕНИТЬ НЕЛЬЗЯ и
ПЕРЕОПРЕДЕЛИТЬ - тоже НЕЛЬЗЯ! (Надежная штука, в общем!)
Добавим в предыдущий сценарий константу INСLUDE_DIR, в которой
определим путь к нашей библиотеке включаемых файлов :
Код
<?php
define('INСLUDE_DIR',"D:/WWW/PHP5/LIB/");
$page_title = "Привет! Это главная страница.";
require_once (INСLUDE_DIR."page_top.inc");
?>
<p align="center">
<font size="5">
Тут пишем всякую ерунду, которую искренне считаем
<br/><br/>
<b>Содержанием Главной Страницы!</b>
<br/>
</font>
</p>
<?php
require_once (INСLUDE_DIR."page_bottom.inc");
?>
Примечание 1. Если кто еще этого не "изучил", то объясняю :
для объединения строк в PHP используется оператор точка (.)
(Страшно неудобно, по-моему, но что поделаешь!)
Примечание 2. При записи пути я поменял обратную косую черту на
прямую, т.к. Windows такое задание пути "прекрасно понимает"!
4. Существует оператор @, котрый приказывает PHP игнорировать
ошибку при вызове функции. Обычно, если происходит отказ вызова
функции что-то сделать, то PHP автоматически выводит в поток
вывода ошибку. Оператор @ предписывает PHP игнорировать ошибку
и продолжить обработку! Давайте воспользуемся этим оператором
и прочитаем содержание какой-нибудь директории :
Код
<?php
define('INСLUDE_DIR',"D:/WWW/PHP5/LIB/");
define('TEST_DIR',"D:/Program Files/Apache Software Foundation/Apache2.2/bin/");
$page_title = "Привет! Это главная страница.";
require_once (INСLUDE_DIR."page_top.inc");
?>
<p align="center">
<font size="5">
<b>
Содержание директории <?php echo TEST_DIR; ?>
</b>
<br/>
</font>
</p>
<p align="center">
<font size="5">
<?php
$dir=opendir(TEST_DIR);
if ($dir===FALSE)
{
echo "Не нашел я папки ".TEST_DIR;
}
else
{
while(($entry=@readdir($dir))!==FALSE)
{
echo $entry."<br/>";
}
}
?>
<br/>
</font>
</p>
<?php
require_once (INСLUDE_DIR."page_bottom.inc");
?>
5. В заключение урока приведу несколько функций для работы
с типами данных PHP. Важнейшая вещь, как Вы понимаете!
Напишите (сами) несколько скриптов и научитесь применять
эти функции на практике. Поюзайте их, в общем! Итак :
а). Функция gettype сообщает тип данных переменной или выражения,
который движок PHP определил для них в данный момент.
Она возвращает следующие строковые значения :
- "boolean"
- "integer"
- "double" ( это вместо "float", по историческим причинам говорят!)
- "string"
- "array"
- "object"
- "resource"
- "NULL"
- "unknown type"
Собственно, это и есть все типы данных, которыми оперирует PHP!
б). На практике чаще применяют группу функций is_type, функции которой
возвращают булево значение, указывающее на "соответствие типов" :
- is_integer
- is_float
- is_numeric (возвращает TRUE, если аргумент float, infeger или числовая строка)
- is_string
- is_bool
- is_array
- is_object
- is_null
в). Функция settype получает два аргумента : переменную для преобразования
и представленный строкой тип, в который эта переменная должна быть
преобразована. Функция возвращает булево значение, которое указывает,
было ли преобразование типа ваполнено успешно или нет.
Сама переменная модифицируется. Например :
Код
<?php
$variable=123.456;
echo "\$variable сейчас должна быть float. Проверим :<br/>";
var_dump($variable); echo "<br/><br/>";
settype($variable,"string");
echo"\$variable из float должна была \"преобразоваться\" в строку.
Проверим :<br/>";
var_dump($variable); echo "<br/>";
?>
г). На практике чаще используют т.н. явное преобразование типов.
Для этого необходимо записать перед переменной (или любым выражением)
название типа в скобках :
- (int), (integer) - выполняет приведение к целому числу;
- (float), (double), (real) - к числу с плавающей точкой;
- (string) - выполняет приведение к текстовой строке;
- (bool), (boolean) - к булеву значению;
- (array) - выполняет приведение к массиву;
- (object) - выполняет приведение к объекту.
Выполните скрипт :
Код
<?php
$variable=123.456;
echo "\$variable сейчас должна быть float. Проверим :<br/>";
var_dump($variable); echo "<br/><br/>";
$var_change=(string)$variable;
echo"\$variable должна \"остаться\" float. Проверим :<br/>";
var_dump($variable); echo "<br/><br/>";
echo"А вот \$var_change должна быть стокой. Проверим :<br/>";
var_dump($var_change); echo "<br/><br/>";
?>
Явное преобразование типов имеет много ньюансов для каждого
конкретного типа данных. Разбирайтесь, если потребуется!
Но теперь (надеюсь) Вам легче станет ориентироваться в PHP-скриптах!