 |
- Содержание
- class
-
extends
- Constructors
-
::
- parent
- Сериализация
объектов - объекты сессий
- Магические
функции __sleep и __wakeup
- Ссылки
внутри конструктора
Класс
это коллекция переменных и функций, работающих с этими переменными. Класс определяется
с использованием следующего синтаксиса: <?php
class Cart { var $items; //элементы в нашей shopping cart // Добавить $num артикулов
$artnr в cart function add_item ($artnr, $num) { $this->items[$artnr] += $num;
} // Изъять $num артикулов $artnr из cart function remove_item ($artnr, $num)
{ if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num;
return true; } else { return false; } } } ?> |
Здесь
определён класс Cart, состоящий из ассоциативного массива артикулов/articles в
карте/cart и двух функций для добавления и удаления элементов этой cart. | Внимание! |
|---|
|
Это предупреждение верно для PHP 4. Имя stdClass используется
внутренне Zend-машиной и зарезервировано. Вы не можете иметь в РНР класс с именем
stdClass. Имена функций __sleep и __wakeup являются
"магическими" в PHP-классах. Вы не можете иметь функции с такими же
именами в любом вашем классе, если только вам не нужна "магическая"
функциональность, ассоциированная с ними. См. далее. PHP резервирует все
имена функций, начинающиеся с __ как магические. Рекомендуем не использовать в
РНР имена функций с __ , если только вам не нужна какая-нибудь задокументированная
магическая функциональность. |
Примечание:
в PHP 4 только константные инициализаторы для var-переменных допустимы.
Для инициализации переменных с неконстантными значениями вам необходима функция
инициализации, которая вызывается автоматически, когда конструируется из класса.
Такая функция называется конструктором (см. далее). <?php
/* Это не будет работать в PHP 4. */ class Cart { var $todays_date = date("Y-m-d");
var $name = $firstname; var $owner = 'Fred ' . 'Jones'; var $items = array("VCR",
"TV"); } /* Вот как это должно делаться. */ class Cart { var $todays_date; var
$name; var $owner; var $items; function Cart() { $this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname']; /* etc. . . */ } } ?> |
Классы
это типы, то есть они являются шаблонами реальных переменных. Вы должны создавать
переменную нужного типа операцией new. <?php
$cart = new Cart; $cart->add_item("10", 1); $another_cart = new Cart; $another_cart->add_item("0815",
3); |
Здесь создаются объекты $cart и $another_cart, оба
от класса Cart. Функция add_item() объекта $cart вызывается для добавления 1 элемента
артикула номер 10 в $cart. 3 элемента артикула номер 0815 добавляются в $another_cart. И
$cart, и $another_cart имеют функции add_item(), remove_item() и элементы переменных.
Это разные функции и переменные. Вы можете представить эти объекты как директории
файловой системы. В файловой системе вы можете иметь два разных файла README.TXT,
если они находятся в разных директориях. Как и с директориями, где необходимо
вводить полный путь к файлу, чтобы достичь его из директории верхнего уровня,
вы должны специфицировать полное имя функции, которую хотите вызвать: в терминологии
PHP, директория верхнего уровня это глобальное пространство имён/global namespace,
а разделителем имён служит ->. Таким образом, имена $cart->items и $another_cart->items
именуют две различные переменные. Заметьте, что переменная именуется $cart->items,
а не $cart->$items, то есть имя переменной в PHP имеет только один знак dollar.
// корректно, один символ $ $cart->items = array("10" => 1); // неверно,
поскольку $cart->$items становится $cart->"" $cart->$items = array("10"
=> 1); // корректно, но может и не быть тем, что вы предполагаете: // $cart->$myvar
становится $cart->items $myvar = 'items'; $cart->$myvar = array("10" =>
1); |
Внутри определения класса вы не знаете, под каким
именем объект будет доступен в вашей программе: на момент написания класса Cart
не было известно, что объект будет называться $cart или $another_cart. Таким образом,
вы не можете написать $cart->items в самом классе Cart. Вместо этого, чтобы
иметь возможность доступа к переменным и функциям внутри класса, можно использовать
псевдопеременную $this, которая может читаться как 'моя собственная' или 'текущий
объект'. То есть '$this->items[$artnr] += $num' можно прочитать как 'добавить
$num к счётчику $artnr элемента моего собственного массива' или 'добавить $num
к счётчику $artnr элемента массива внутри текущего объекта'. Примечание:
имеются отличные функции для работы с классами и объектами. Вы можете просмотреть
их в разделе Class/Object-функции.
|  |