HTML, Excel, Word, SEOPHP курс для чайников ⇒ Классы

PHP для "чайников"

Инструменты
Выбираем IDE
Выбираем Web-сервер
Выбираем СУБД
Структура языка PHP
Первый шаг
Синтаксис
Типы данных
Переменные и константы
Операторы
Выражения
Управляющие структуры
Функции
Классы
Исключения
Ошибки
Массивы
Глобальные массивы
Cookies
Сессии
Загрузка файлов
Работа с файлами
Работа с файлами на диске
Работа с данными в файле
Пример управления файлами
Работа с базами данных
Подключение
Анализ результатов
Выполнение запросов
Отключение
Пример: отслеживание пользователей
Работа в сети
Отправка почты
Безопасность
HTTP-аутентификация
Защита логином и паролем
Автоматизация
Регулярные выражения в PHP
Интеграция
PHP и JavaScript

 

PHP: Классы


Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

Класс - это одно из ключевых понятий так называемого "объектно-ориентированного программирования". Тема ООП достаточно сложна для понимания, но её освоение даст вам в руки мощнейший инструмент для создания и совершентвования своих скриптов. Мы не будем вдаваться в дебри теории, а рассмотрим только самое необходимое.


Класс можно представить как формальное описание некоего объекта, у которого есть свойства и методы. Свойство - это какое-то значение, ассоциированное с классом, а метод - функция, принадлежащая классу. Простой пример класса - "человек". Свойствами этого класса будет "цвет волос", "рост", "вес" и т.д., а методами - "спать", "есть", "ходить" и т.п.


Для того, чтобы воспользоваться классом, необходимо создать его экземпляр. Экземпляр класса - это реальный объект, для которого выделена память и установлены значения всех свойств. Для класса "человек" экземпляром будет конкретный индивид со своим цветом волос, ростом, весом и номером паспорта.


Одно из преимуществ объектного подхода при разработке систем - возможность скрытия особенностей реализации отдельных методов. Например, класс "человек" реализует метод "ходить", который выполняет перемещение экземпляра куда-либо. При этом нам совершенно не важно, как будет произведено перемещение: на ногах, на костылях или стоя на руках. Главное - мы знаем, что после вызова метода "ходить" экземпляр переместится куда скажем.


Рассмотрим другой пример - графические фигуры. Например:

<?php
    // объявляем класс с именем Rectangle
    class Rectangle
    {
        // свойство "ширина"
        private $width;
        // свойство "высота"
        private $height;

        // конструктор класса
        public function __construct($x, $y)
        {
            $this->width = $x;
            $this->height = $y;
        }

        // метод "посчитать площадь"
        public function Square()
        {
            return $this->width * $this->height;
        }
    }

    // создаём массив прямоугольников
    $rects = array();
    // заполняем массив экземплярами
    $rects['1'] = new Rectangle(100, 100);
    $rects['2'] = new Rectangle(20, 200);
    $rects['3'] = new Rectangle(300, 50);

    // выводим площадь каждого экземпляра
    foreach($rects as $key => $rect)
    {
        echo 'Площадь ' . $key .
                ' прямоугольника: ' . $rect->Square() .
                ">br />\n";
    }
?>

Объявление класса начинается с ключевого слова "class", после которого записывается имя класса. Тело класса (все свойства и методы) ограничиваются фигурными скобками "{}". Объявление любого свойства или метода начинается с ключевых слов public или private, определяющих область видимости свойства или метода. Элементы, помеченные "public" (публичные) видны извне класса, а помеченные "private" (частные) можно использовать только внутри этого же класса. Например:

<?php
    // создаём экземпляр класса
    $rect = new Rectangle(100, 100);
    // вызов публичного метода
    echo $rect->Square();
    // попытка ображения к закрытому
    // свойству вызовет ошибку
    echo $rect->width;
?>

Свойства класса объявляются как обычные переменные (см. переменные $width и $height), а методы класса - как обычные функции. Основное отличие в том, что внутри метода непосредственно доступны все свойства и методы данного класса, т.е. нет необходимости пользоваться конструкцией global. Для указания того, что вы хотите обратиться к методу или свойству текущего экземпляра надо воспользоваться ссылкой $this, которая автоматически доступна внутри экземпляра любого класса (см. код метода Square() ).

Экземпляр класса создаётся при помощи ключевого слова "new" и имени класса. Конструкцию

<?php
    $rect = new Rectangle(100, 100);
?>

следует читать как "Создать экземпляр класса Rectangle с высотой 100, шириной 100, ссылку на экземпляр поместить в переменную $rect". В момент создания класса автоматически выполняется служебный метод, т.н. "конструктор". Он имеет фиксированное имя "__construct()", а тип и количество параметров определяет разработчик. Основное назначение конструктора - инициализация внутренних переменных и свойств класса. Единственное отличие конструктора от обычного метода - конструктор не может возвращать значение. Пример:

<?php
    // объявили класс с конструктором
    class DemoClass
    {
        private $a;
        private $b;
        private $c;
        private $d;

        public function __construct($a, $b, $c)
        {
            $this->a = $a;
            $this->b = $b;
            $this->c = $c;
            $this->d = 'my secret string';
        }

        public function getSecret()
        {
            return $this->d;
        }
    }

    // создаём экземпляр класса
    $demo = new DemoClass('a', 'b', 'c');
    // выводим секретную строку
    echo $demo->getSecret();
    // строка 'my secret string' выводится,
    // хотя мы её явно не инициализировали
?>

Экземпляры классов удаляются так же, как все переменные PHP - посредством вызова unset(). При удалении экземпляра автоматически вызывается его деструктор. Это служебный метод без параметров с именем "__destruct()", в котором программист может явно закрыть и освободить все ресурсы, используемые экземпляром. По умолчанию, все ресурсы гарантированно освобождаются по окончании выполнения скрипта.

ООП - интересная область PHP, но изучать её в отрыве от практики очень сложно. Поэтому сейчас мы не будем вдаваться в тонкости и подробности, а рассмотрим их позже при решении практических задач.



В начало страницы



В начало страницы