
- •Установка и настройка по
- •Установка Apache 1.3.29 под Windows xp
- •Установка php 4.3.4 под Windows
- •Дистрибутив Денвер
- •Первая php-программа
- •Синтаксис
- •Переменные, константы и операторы
- •Переменные
- •Константы
- •Типы данных
- •Тип boolean (булев или логический тип)
- •Тип integer (целые)
- •Тип float (числа с плавающей точкой)
- •Тип string (строки)
- •Одинарные кавычки
- •Двойные кавычки
- •Heredoc
- •Тип array (массив)
- •Определение при помощи array()
- •Определение с помощью синтаксиса квадратных скобок
- •Управляющие конструкции Условные операторы Оператор if
- •Оператор else
- •Оператор elseif
- •Do... While
- •Foreach
- •Операторы передачи управления
- •Continue
- •Операторы включения
- •Include
- •Require
- •Обработка запросов с помощью php
- •Протокол http и способы передачи данных на сервер
- •Форма запроса клиента
- •Использование html-форм для передачи данных на сервер
- •Для метода get
- •Для метода post
- •Обработка запросов с помощью php
- •Пример обработки запроса с помощью php
- •Заключение
- •Функции в php
- •Аргументы функций
- •Списки аргументов переменной длины
- •Возвращаемые значения
- •Возвращение ссылки
- •Переменные функции
- •Объекты и классы в php
- •Инициализация переменных
- •Объекты
- •Наследование extends
- •Конструкторы
- •Оператор ::
- •Оператор parent
- •Объектная модель php5
- •Решение задачи
- •Заключение
- •Функция in_array
- •Функция array_search
- •Функция array_keys
- •Функция array_unique
- •Сортировка массива по ключам
- •Сортировка с помощью функции, заданной пользователем
- •Работа со строками
- •Выделение подстроки Функция strstr
- •Функция substr
- •Функция substr_replace
- •Проверка существования файла
- •Функция file_exists
- •Функция is_writable
- •Функция is_readable
- •Базы данных и субд. Введение в sql
- •Взаимодействие php и MySql
- •Выбор базы данных
- •Получение списка полей таблицы
- •Отображение списка полей в html-форму
- •Авторизация доступа с помощью сессий
- •Регулярные выражения
- •Взаимодействие php и xml
- •Обход дерева объектов
- •Добавление новых элементов в xml-документ
- •Заключение
- •Использование шаблонов в php
Оператор ::
Иногда внутри описания классавозникает необходимость сослаться на функции или переменные избазового класса. Бывает, что нужно ссылаться на функции вклассе, ни один представитель которого еще не создан. Как быть в таком случае? В PHP4 для этого существует специальный оператор«::»
Например, вот так можно вызвать в описании классаProgrammerфункциюshow_name()избазового классаPersonи функциюsay_hello(), заданную в описанииклассаProgrammer, когда ни одинобъектэтогоклассаеще не был создан:
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
function show_name(){
// метод отображает информацию о личности
echo ("Меня зовут, " .
$this->first_name . " " .
$this->last_name . "!<br>");
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
function set_lang($new_lang){
// метод добавляет еще
// один язык к списку известных
$this->langs[] = $new_lang;
Person::show_name();
// вызываем функцию из базового класса
echo "И я знаю теперь еще и " .
$new_lang;
}
function show_name(){
echo ("Я программист, " .
$this->first_name . " " .
$this->last_name . "!<br>");
}
function say_hello(){
echo "Привет!<br>";
}
}
Programmer::say_hello();
// вызываем функцию, когда ни
// один объект ее класса еще не создан
$new_progr = new Programmer("Вася","Сидоров");
$new_progr->set_lang("PHP");
?>
В результате работы этой программы получим следующее:
Привет!
Меня зовут Вася Сидоров!
И я знаю теперь еще и PHP
С помощью команды Programmer::say_hello();мы вызываем функциюsay_helloклассаProgrammerкак таковую, а не какметод, применяемый кобъектуданногокласса. В этот момент переменныхклассанет. Поэтому функции, вызываемые до созданияобъекта, не могут пользоваться переменнымиклассаи конструкциейthis, но могут пользоваться локальными и глобальными переменными.
В определении классаProgrammerмы переопределили функциюshow_name(), поэтому вызвать функциюshow_name()избазового классаPersonможно только с помощью оператора«::»Вообще говоря, внутри определенияклассамы можем вызывать любыеметодыисвойства, заданные в егобазовом классес помощью обычного$this, если только порожденныйклассне переопределяет этисвойстваиметоды, как в нашем примере.
Оператор parent
В приведенном выше примере, обращаясь в базовому классу, мы использовали его имя (мы писалиPerson::show_name()). Это не совсем удобно, потому что имяклассаили иерархияклассовможет измениться, и тогда придется переписывать код описаний всехклассовс тем, чтобы привести используемые в них имена в соответствие с новой иерархией. Чтобы избежать подобной ситуации, вместо именибазового классанужно использовать ключевое слово parent (например,parent::show_name()).Parentссылается накласс, прописанный послеextendsв объявлении вашегокласса. Поэтому если вдруг иерархияклассовизменится, то достаточно будет внести изменения в имена, указанные послеextendsв описанияхклассов.