Главная Статьи Написать
 
Начнём
Введение
Инсталяция
Конфигурирование
Безопасность
Справочник Языка
Базовый синтаксис
Типы
Переменные
Константы
Выражения
Операции
Структуры управления
Функции
Классы и Объекты
Ссылки. Разъяснение.
Возможности
Обработка Ошибок
Создание изображений и манипуляции с ними
HTTP-аутентификация в PHP
Куки
Обработка загрузки файлов
Использование удалённых файлов
Обслуживание соединений
Постоянные соединения с базами данных
Безопасный режим
Использование PHP из командной строки
Функции. Справочник.
Функции, специфические для Apache
Array-функции
Aspell-функции [не рекомендуются]
BCMath математические функции произвольной точности
Bzip2 Compression-функции
Calendar-функции
CCVS API-функции
Функции поддержки COM для Windows
Class/Object-функции
ClibPDF-функции
Crack-функции
CURL, Client URL Library-функции
Cybercash payment-функции
Crédit Mutuel CyberMUT-функции
Cyrus IMAP -функции администрирования
Функции типов символов
Функции абстрактного слоя БД (dbm-стиль)
Дата и Время
dBase-функции
DBM-функции
dbx-функции
DB++-функции
Direct IO-функции
Функции директорий
DOM XML-функции
.NET-функции
Обработка ошибок и логинг
FrontBase-функции
filePro-функции
Функции файловой системы
Forms Data Format-функции
FriBiDi-функции
FTP-функции
Функции работы с функциями
Gettext
GMP-функции
HTTP-функции
Hyperwave-функции
Hyperwave API-функции
ICAP-функции [не рекомендуются]
iconv-функции
Image-функции
IMAP, POP3 и NNTP-функции
Informix-функции
InterBase-функции
Ingres II-функции
IRC Gateway-функции
Java
LDAP-функции
Mail-функции
mailparse-функции
Mathematical-функции
Многобайтные строки
MCAL-функции
Mcrypt Encryption-функции
Mhash-функции
Mimetype-функции
Microsoft SQL Server-функции
Ming-функции для Flash
Прочие функции
mnoGoSearch-функции
mSQL-функции
MySQL-функции
Mohawk Software -функции обработчика сессии
muscat-функции
Network-функции
Ncurses -функции управления терминалом
Lotus Notes-функции
Unified ODBC-функции
Oracle 8-функции
OpenSSL-функции
Oracle-функции
Ovrimos SQL-функции
Управление выводом
Перегрузка свойств объектов и вызовов методов
PDF-функции
Verisign Payflow Pro-функции
PHP. Опции & Информация
POSIX-функции
PostgreSQL-функции
Управление процессом
Выполнение программы
Printer-функции
Pspell-функции
GNU Readline
GNU Recode-функции
Функции регулярных выражений (Perl-совместимые)
qtdom-функции
Функции регулярных выражений (POSIX расширенная)
Semaphore, Shared Memory и IPC-функции
SESAM database-функции
Обслуживание сессий
Shared Memory-функции
Shockwave Flash-функции
SNMP-функции
Socket-функции
String-функции
Sybase-функции
URL-функции
Функции переменных
vpopmail-функции
W32api-функции
WDDX-функции
XML parser-функции
XMLRPC-функции
XSLT-функции
YAZ-функции
YP/NIS-функции
Zip File-функции (доступ только для чтения)
Zlib Compression-функции
Расширение PHP 4.0
Обзор
Возможность расширения
Строение исходного кода
Система автоматического построения РНР
Создание расширений
Использование расширений
Решение проблем
Исходные Ресурсы. Обсуждение.
Приём аргументов
Создание переменных
Дублирование содержимого переменной: конструктор Copy
Возвращаемые значения
Печать информации
Startup и Shutdown-функции
Вызов пользовательских функций
Поддержка файлов инициализации
Что дальше?
Справочник: некоторые макросы конфигурации
Макросы API
FAQ: Frequently Asked Questions
Общая информация
Списки рассылки
Получение PHP
Вопросы о базах данных
Инсталяция
Проблемы построения
Использование PHP
PHP и HTML
PHP и COM
PHP и другие языки
Переход от PHP 2 к PHP 3
Переход от PHP 3 к PHP 4
Другие вопросы
Приложения
История PHP и смежных проектов
Переход от PHP 3 к PHP 4
Переход от PHP/FI 2 к PHP 3
Отладка PHP
Расширение PHP
Список псевдонимов функций
Список зарезервированных слов
Список типов ресурсов
Список лексем разборщика
Об этом учебнике




class

Класс это коллекция переменных и функций, работающих с этими переменными. Класс определяется с использованием следующего синтаксиса:

<?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-функции.