В отличие от обычных, статические поля одинаковы для всех экземпляров класса и изменение статического свойства приведёт к его изменению для всех экземпляров класса. Обращение к статическим членам внутри класса производится при помощи ключевого слова self, а при их объявлении пишется ключевое слово static. Обращение к статическим членам извне класса производится с указанием имени класса. Для доступа к ним используется символ '::'. Статические методы не имеют доступ к обычным (нестатическим) членам, так как в противном случае было бы непонятно к какому экземпляру класса относятся эти нестатические члены, к которым обращается статический метод.
Пример:
В примере продемонстрирована работа со статическим полем $loverCount, обращение к нему как внутри класса, так и за его пределами. При создании нового экземпляра класса, значение статического поля увеличивается. Статический метод вывод сообщение – применение $this недопосутимо.
Задание 11
1. Опишите в классах User и SuperUser статические свойства для подсчета количества созданных объектов;
2. Присвойте этим свойствам начальные значения (0);
3. В конструкторах инкрементируйте значения данных свойств;
4. После создания экземпляров классов User и SuperUser выведите в браузер количество тех и других объектов.
Оператор instanceof
Этот оператор возвращает булево значение, показывающие относится ли объект к заданному классу или нет. Синтаксис этого оператора:
$object instanceof ClassName;
При этом этот оператор возвращает true даже если слева стоит экземпляр класса-наследника от класса, имя которого указанно справа.
Оператор instanceof удобно применять, когда необходимо убедится в наличии у экземпляра необходимых данных или функционала, которые присущи экземпляром какого-нибудь класса.
Пример:
Задание 12
1. Опишите функцию checkObject(), которая принимает в качестве входящего параметра объект;
2. Проверьте Ваш объект, используя следующие условия: Если объект является экземпляром класса SuperUser, выводите сообщение, что данный пользователь обладает правами администратора;
3. Если объект является экземпляром класса User, выводите сообщение, что данный пользователь является обычным пользователем. Если объект не является ни тем, ни другим, выводите сообщение, что данный пользователь - неизвестный пользователь.
Метод __toString()
Метод __toString() позволяет классу решать самостоятельно, как он должен реагировать при преобразовании в строку. Для того чтобы подставить значение переменных необходимо строку поместить в двойные кавычки.
Пример:
Задание 13
1. Создайте свойство objNum, которое будет хранить порядковый номер объекта.
Подумайте, где лучше его создать?
2. Внесите изменения в классе User (а может и в SuperUser?), которые будут присваивать свойству objNum, порядковый номер объекта.Подумайте, где и как лучше это сделать?
3. В классе User (а может и в SuperUser?) опишите метод __toString(). Данный метод должен возвращать строку в формате «Объект #objNum: name». Например: «Объект #3: Василий Пупкин»;
4. Попробуйте преобразовать один из созданных Вами объектов в строку.
Функция _autoload()
Многие разработчики, пишущие объектно-ориентированные приложения, создают один файл, в котором содержится определение класса. Очень неудобно писать в начале каждого скрипта длинный список включаемых файлов по одному на каждый класс.
Начиная с PHP 5 в этом больше нет необходимости. Вы можете определить функцию __autoload(), которая автоматически будет вызываться в случае использования класса, который не был определен выше. Это позволяет сделать автоматическую подгрузку файлов с описанием классов (в тот момент, когда мы начинаем использовать этот класс, в случае, если класс в сценарии не используется- то и файл с его описанием не будет подключаться) и избавиться от множественных инструкций include.
Пример:
Задание 14
1. В директории "oop" создайте файл "User.class.php";
2. Перенесите описание класса User из файла "users.php" в файл "User.class.php";
3. В директории "oop" создайте файл "SuperUser.class.php";
4. Перенесите описание класса SuperUser из файла "users.php" в файл "SuperUser.class.php";
5. Посторите те же действия для класса AUser и интерфейса ISuperUser;
6. В файле "users.php"(данный файл) опишите функцию __autoload(), которая автоматически присоединяет файлы с описанием классов к файлу "users.php".
МОДУЛЬ 3
Задание 15
Создать класс-оболочку для работы с БД, минимальный функционал которого позволяет установить соединение с сервером и подключиться к БД, выполнить запросы SELECT, UPDATE, DELETE. Продемонстрируйте пример работы.