public - открытый доступ (по умолчанию, то же что использовать var)
protected - только внутри класса или потомков
private - только внутри класса
Объекты одного класса имеют доступ к защищенным свойствам/методам друг друга
Объявление свойств и методов класса статическими (static) позволяет обращаться к ним без создания экземпляра класса. псевдо-переменная $this не доступна внутри метода, объявленного статическим. Доступ к статическим свойствам класса не может быть получен через оператор ->.
Оператор разрешения области видимости или просто "двойное двоеточие":: - это лексема, позволяющая обращаться к статическим свойствам, константам и перегруженным свойствам или методам класса. При обращении к этим элементам извне класса, необходимо использовать имя этого класса. Для обращения к свойствам и методам внутри самого класса используются ключевые слова self, parent и static.
Абстрактные классы
abstract class AbstractClass
{
/* Данный метод должен быть определён в дочернем классе */
abstract protected function getValue();
|
|
abstract protected function prefixValue($prefix);
/* Общий метод */
public function printOut() {
print $this->getValue(). "\n";
}
}
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в классе-потомке; кроме того, область видимости этих методов должна совпадать (или быть менее строгой).
Интерфейсы - как в яве
объявляются как классы, но вместо class - interface. Содержат только публичные методы. По сути близки к абстрактным классам. Могут содержать константы, но не перекрываются реализующими классами. Могут расширять друг друга (допустимо множественное наследование).
class Child implements example_interface {}
PHP 5 предоставляет такой способ объявления объектов, который дает возможность пройти по списку элементов данного объекта, например, с помощью оператора foreach. По умолчанию, в этом обходе (итерации) будут участвовать все видимые свойства объекта. (внутри класса - все свойства, снаружи - только паблики и т.д.)
Магические методы вызываются автоматически в определенных ситуациях
__construct(), __destruct() - создание/уничтожение
__call(), __callStatic(), __get(), __set(), __isset(), __unset() - "перегрузка" свойств и методов - динамическое их создание
__sleep() и __wakeup() - используются при сериализации/десериализации объекта
__toString() - преобразование в строку
__invoke() - при выполнении объекта как функции
__set_state() - для var_export()
__clone() - при клонировании объектов вызывается у клона для переинициализации свойств
В PHP5 объекты передаются всегда как ссылки. Присваивание объектов тоже происходит по ссылке.
Создание копии - клонирование объектов $copy_of_object = clone $object;
PHP 5 представляет ключевое слово final, разместив которое перед объявлениями методов класса, можно предотвратить их переопределение в дочерних классах. Если же сам класс определяется с этим ключевым словом, то он не сможет быть унаследован. Свойства не могут быть финализированы
|
|
При использовании оператора сравнения (==), свойства объектов просто сравниваются друг с другом, а именно: два объекта равны, если они содержат одинаковые свойства и одинаковые значения, и являются экземплярами одного и того же класса.
С другой стороны, при использовании оператора идентичности (===), переменные объектов считаются идентичными тогда и только тогда, когда они ссылаются на один и тот же экземпляр одного и того же класса.
Сериализация объектов - сохранение объектов между сессиями
Функция serialize() возвращает строковое представление любого значения, которое может быть сохранено в PHP. Функция unserialize() использует эту строку для востановления исходного значения переменной. Использование serialize для сериализации объекта сохранит имя класса и все его свойства, однако методы не сохраняются.
Для того, чтобы иметь возможность сделать unserialize() для объекта нужно чтобы класс этого объекта был определен заранее.
=====================================