
- •Обработка динмачиской html страницы
- •Назначение и виды веб серверов
- •Способы встраивания php скрипта в html код
- •Переменные и константы в php. Область определения переменных
- •Область видимости переменных
- •Переменные переменные
- •Константы
- •5. Особенности синтаксиса php
- •6. Глобальные и статические переменные php Глобальные переменные в php
- •Статические переменные в php
- •7. Система типов языка php
- •8. Вывод данных в php
- •Арифметические операторы php
- •Логические операторы php
- •Строковые операторы php
- •Операторы присвоения в php
- •Операторы сравнения в php
- •Операторы инкремента и декремента в php
- •Операторы эквивалентности php
- •Операции с символьными переменными в php
- •Приоритеты выполнения операторов в php
- •Операторы исполнения внешних команд в php
- •Операторы для работы с массивами php
- •Операторы управления ошибками php
- •Операторы классов php
- •Поиск и замена подстрок
- •Регулярные выражения
- •Жадные и ленивые квантификаторы в регулярных выражениях
- •Использование html-форм для передачи данных на сервер
- •Для метода get
- •Для метода post
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Типы ресурсов Предопределенные константы
- •Проверка существования файла
- •Функция file_exists
- •Функция is_writable
- •Функция is_readable
- •I. Открытие файла
- •II. Манипуляции с данными файла
- •III. Закрытие файла
- •Запись в файл
- •Чтение из файла
- •Взаимодействие php и MySql
- •Создание базы данных с помощью html-формы
- •Листинг 1. Код html-формы
- •Листинг 2. Код записывающей html-формы
Область видимости переменных
Очень важная характеристика переменной - её область видимости (область действия), т.е. описание того, из каких мест программы (скрипта) можно прочитать или изменить её значение. Следует всегда помнить, что переменная, объявленная внутри блока программы, видна только в пределах этого блока, а для того, чтобы обратиться к переменной, объявленной снаружи блока, необходимо её особым образом объявить.
Блоками программы в данном случае являются "скрипт", "функция" или "класс". Например:
<php
$name = 'Вася';
// переменная $name объявлена в блоке "скрипт"
// функция, добавляющая фамилию к имени
function tryChengeName($family)
{
$fullName = $name . $family;
echo 'Имя внутри функции: '.$fullName;
}
echo 'Имя ДО вызова функции: '.$name;
// результат: "Имя ДО вызова функции: Вася"
tryChengeName(' Иванов');
// результат: ""
echo 'Имя ПОСЛЕ вызова функции: '.$name;
// результат: "Имя ПОСЛЕ вызова функции: Вася"
?>
Вроде бы всё правильно, но - не работает. Почему? Потому что если явно не сказать, что переменная $name внутри функции - это в действительности глобальная переменная $name, то интерпретатор создать временную копию переменной с именем $name и пустым значением. А так как значение пустое (неопределённое), то и результат сложения строк будет неопределён (пуст).
Исправить положение очень легко, достаточно добавить всего одну строку (выделена жирным шрифтом):
<php
$name = 'Вася';
// переменная $name объявлена в блоке "скрипт"
// функция, добавляющая фамилию к имени
function tryChengeName($family)
{
global $name;
// явно указываем, что надо
// использовать глобальную переменную.
$fullName = $name . $family;
echo 'Имя внутри функции: '.$fullName;
}
echo 'Имя ДО вызова функции: '.$name;
// результат: "Имя ДО вызова функции: Вася"
tryChengeName(' Иванов');
// результат: "Имя внутри функции: Вася Иванов"
echo 'Имя ПОСЛЕ вызова функции: '.$name;
// результат: "Имя ПОСЛЕ вызова функции: Вася Иванов"
?>
В данном примере переменная $name имеет область видимости, равную всему скрипту, а переменная $fullName, объявленная внутри функции, имеет область определения равную этой самой функции. Это значит, при выходе их функции переменная $fullName будет уничтожена, а все попытки прочитать её значение приведут к ошибке.
Примеры работы с классами мы рассмотрим в разделе "Классы и наследование".
Переменные переменные
Да-да, здесь нет ошибки, именно так (двумя словами) называются некоторые переменные в PHP. Смысл в том, что текстовая часть имени переменной (т.е. имя без знака доллара) может сама быть именем. Например:
<php
// объявляем и инициализируем
// переменную $varVar
$varVar = 'Вася';
// объявляем и инициализируем
// переменную $$varVar, т.е. $Вася
$$varVar = 'Иванов';
echo "$varVar ${$varVar}";
// выведет Вася Иванов,
?>
Настоятельно не рекомендуется пользоваться подобными приёмами без острой необходимости. Код, напичканый такими трюками, очень сложно сопровождать. Особенно это важно при работе с данными, вводимыми пользователями. Главная причина сложностей - неявные зависимости. Например, что случится, если вместо имени 'Вася' написать что-то вроде "''""_;%//^q'"? Правильно! Скрипт в большинстве случаев не сможет выполниться! Можно, конечно, добавить кучу проверок на наличие "неправильных" символов, но проще вообще не пользоваться такими трюками.