Область видимости
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() для объекта нужно чтобы класс этого объекта был определен заранее.
=====================================
MySQL
MySQL - это популярная система управления базами данных (СУБД), очень часто применяемая в сочетании с PHP.
MySQL - это система управления реляционными базами данных. В реляционной базе данных данные хранятся не все скопом, а в отдельных таблицах, благодаря чему достигается выигрыш в скорости и гибкости. Таблицы связываются между собой при помощи отношений, благодаря чему обеспечивается возможность объединять при выполнении запроса данные из нескольких таблиц.
Схема "Клиент-сервер"
трехуровневая структура: базы данных — таблицы — записи.
Тип поля может быть:
- Целым;
- Вещественным;
- Строковым;
- Бинарным;
- Дата и время;
- Перечисления и множества.
Возможные типы данных, диапазоны и описания представлены в последующих таблицах:
Целочисленные типы данных
Тип Диапазон
TINYINT -128...+127
SMALLINT -32768...+32767
MEDIUMINT -8 388 608...+8 388 607
INT -2 147 483 648...+2 147 483 647
BIGINT -9 223 372 036 854 775 808...+9 223 372 036 854 775 807
Вещественные числа
Тип Описание
FLOAT Небольшая точность
DOUBLE Двойная точность
REAL То же, что и DOUBLE
DECIMAL Дробное число, хранящееся в виде строки
NUMERIC То же, что и DECIMAL
Строки
Любая строка - это массив символов. При поиске с помощью оператора SELECT (мы рассмотрим его далее) не учитывается регистр символов: строки "HELLO" и "Hello" считаются одинаковыми. Можно настроить MySQL на автоматическое перекодирование символов - в этом случае в базе данных строки будут храниться в одной кодировке, а выводиться - в другой. В большинстве случаев применяется тип VARCHAR или просто CHAR, позволяющий хранить строки, содержащие до 255 символов. В скобках после типа указывается длина строки:
VARCHAR(48); CHAR(73);
Тип Описание
TINYTEXT Максимальная длина 255 символов
TEXT Максимальная длина 65535 символов (64 Кб)
MEDIUMTEXT Максимальная длина 16 777 215 символов
LONGTEXT Максимальная длина 4 294 967 295 символов
Бинарные типы данных
Бинарные типы данных также можно использовать для хранения текста, но при поиске будет учитываться регистр символов. К тому же, любой текстовый тип можно преобразовать в бинарный, указав модификатор BINARY:
VARCHAR(30) BINARY;
Тип Описание
TINYBLOB Максимум 255 символов
BLOB Максимум 65535 символов
MEDIUMBLOB Максимум 16 777 215 символов
LONGBLOB Максимум 4 294 967 295
Примечание: Бинарные данные не перекодируются "на лету", если установлена перекодировка символов.
Дата и время
Тип Описание
DATE Дата в формате ГГГ-ММ-ДД
TIME Время в формате ЧЧ:ММ:СС
TIMESTAMP Дата и время в формате timestamp, ГГГГММДДЧЧММСС
DATETIME Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
CREATE TABLE Имя_таблицы (
Имя_поля1 Тип Модификатор
...
Имя_поляN Тип Модификатор
)
Модификаторы:
NOT NULL
PRIMARY KEY
AUTO_INCREMENT
DEFAULT