class
Класс - это совокупность переменных и функций, работающих с
этими переменными. Переменные определяются при помощи ключевого слова var,
а функции при помощи ключевого слова function. Класс определяется при
помощи следующего синтаксиса:
Здесь определён класс с именем Cart, который состоит из ассоциативного массива
товаров в корзине и двух функций для добавления и удаления продуктов из этой
корзины.
Внимание
Вы НЕ можете разрывать определение класса в несколько
разных файлов. Вы также НЕ можете разрывать определение
класса в различные блоки PHP, кроме случая, если разрыв происходит внутри объявления
метода. Следующий код не будет работать:
Однако, так делать можно:
Следующие предостерегающие замечания справедливы для PHP 4.
Предостережение
Имя stdClass зарезервировано для использования внутри Zend. Вы не
можете определить свой класс с именем stdClass в PHP.
Предостережение
Функции __sleep и __wakeup являются волшебными в
классах PHP. Вы не можете создать функции с такими именами в ваших классах,
если вы не хотите использовать волшебную функциональность, связанную
с ними. Смотрите больше информации ниже.
Предостережение
В PHP зарезервированы имена функций, начинающихся с __ как
волшебные. Рекомендуется не использовать имена функций, начинающиеся с
__ в PHP, если только вы не хотите использовать какую-либо
документированную волшебную функциональность.
В PHP 4 допускаются только постоянные инициализаторы для переменных
var. Чтобы инициализировать переменные не постоянными
значениями, вам нужно использовать инициализирующую функцию, которая вызывается
автоматически когда объект конструируется из класса.
Такая функция называется конструктором (смотрите ниже).
Классы - это типы, таким образом, они являются наметками для переменных.
Вы можете создать переменную желаемого типа при помощи оператора
new.
В листинге выше создаётся два объекта, $cart и
$another_cart, оба класса Cart. Функция
add_idem() объекта $cart вызывается для того,
чтобы добавить 1 товар артикула 10 к объекту $cart. 3 товара
артикула 0815 будут добавлены к объекту $another_cart.
Оба объекта, $cart и $another_cart, имеют
функции add_item(), remove_item()
и переменную items. Однако это разные функции и переменные. Вы
можете представлять себе объект как нечто похожее на каталоги в файловой системе.
В файловой системе вы можете иметь два разных файла
README.TXT, если они находятся в разных каталогах.
Так же, как и с каталогами, где вы должны ввести полный путь к файлу, чтобы обратиться
к файлу из каталога верхнего уровня, вы должны указать полное имя функции, которую вы
хотите вызвать: в нотации PHP, каталог верхнего уровня называется "Глобальное
пространство имен", а разделителем пути является символ ->. Таким
образом, названия $cart->items и
$another_cart->items обозначают две разных переменных.
Заметьте, что переменная называется $cart->items, а не
$cart->$items, таким образом, название переменной в PHP имеет
только один знак доллара ($).
При определении класса, вы не знаете, под каким именем объект будет доступен в вашей
программе: во время описания класса Cart было неизвестно, как позднее будет назван
объект: $cart, $another_cart или как-нибудь
ещё. Таким образом, вы не можете написать $cart->items в классе Cart.
Вместо этого, для того, чтобы иметь возможность доступа к своим собственным переменным
и функциям внутри класса, можно использовать псевдо-переменную $this
которая может быть прочитана как 'мой собственный' или 'текущий объект'. Таким образом,
'$this->items[$artnr] += $num' может быть
прочитано как 'добавить $num к счётчику $artnr
моего собственного массива продуктов' или 'добавить $num к счётчику
$artnr массива продуктов текущего объекта'.
Замечание:
Псевдо-переменная $this обычно не определена, если метод, который
обращается к ней, вызывается статически. Однако, это не строгое правило: переменная
$this определена, если метод вызывается статически из другого объекта.
В этом случае значение переменной $this будет указывать на
вызывающий объект. Это проиллюстрировано в следующем примере:
Замечание:
Есть несколько прикольных функций для работы с классами и объектами. Если захотите
из изучить, смотрите раздел Функции классов и объектов.