#7. 2 php Создание класса

Класс является набором переменных и функций, или, в терминах ООП, свойств и методов. Класс является одним из типов данных. Создавая объекты определенного класса, их можно сохранять в переменных. В предыдущем разделе в качестве примера был приведен класс Animal, который будет подробно рассмотрен ниже. Описание класса начинается с ключевого слова class, за которым следует имя создаваемого класса:

class Animal
{
    ...
}

Класс предназначен для хранения имени животного, и для этой цели объявляется локальная переменная $name, называемая в ООП свойством. Ключевое слово private является модификатором доступа и указывает на то, что свойство $name доступно только внутри класса. Несмотря на то, что в описании указывается знак $, свойство традиционно обозначается просто своим именем, в данном случае name.

class Animal
{
    private $name;
    ...
}

Замечание 1: Ключевое слово var при определении свойств класса

При определении свойства класса вместо модификатора доступа может использоваться ключевое слово var:
class Animal
{
    var $name;
    ...
}

Это связано с тем, что в старых версиях PHP ограничивать доступ к членам класса было нельзя, и все они неявно имели модификатор public. Однако рекомендуется всегда явно указывать область видимости для всех свойств и методов класса и избегать применения ключевого слова var, за исключением тех случаев, когда это делается в целях совместимости со старыми версиями.

После описания свойство класса доступно для всех его методов, в частности, для метода set_name, который предназначен для запоминания имени животного.

class Animal
{
    private $name;
    public function set_name($text)
    {
       ... 
    }
    ...
}

Ключевое слово public является ещё одним модификатором доступа, который указывает на то, что доступ к методу set_name объекта класса Animal имеется в любом месте, где объявлен данный объект.

Замечание 2: Ограничения при определении методов класса

Имеются некоторые ограничения при определении методов класса. Например, не поддерживается перегрузка методов класса, т.е. создание в одном классе нескольких методов с одинаковыми именами, которые различались бы только типами и количеством аргументов. Например, такое описание класса Animal будет ошибочным:
class Animal
{
    private $name;
    public function set_name($text)
    {
       ... 
    }
    public function set_name($text1, $text2)  //ошибка — нельзя перегружать методы
    {
        ...
    }
    ...
}

Также, в отличие от некоторых языков программирования, в PHP нельзя переопределить стандартные арифметические операторы (например, +, - и т.д.).

Для получения доступа к свойству класса изнутри его метода используется встроенная переменная $this, которая указывает на текущий объект данного класса. Переменная содержит указатель и используется совместно с оператором ->, таким образом, для ссылки на свойство name необходимо использовать следующий синтаксис: $this->name (следует обратить внимание, что перед именем свойства отсутствует знак $), синтаксис $this->$name является некорректным).

class Animal
{
    private $name;
    public function set_name($text)
    {
        $this->name = $text;
    }
    ...
}

Другой метод класса, get_name, возвращает текущее имя животного:

class Animal
{
    private $name;
    public function set_name($text)
    {
        $this->name = $text;
    }
    public function get_name()
    {
        return $this->name;
    }
}

На этом описание класса Animal завершено, и в следующем разделе будет продемонстрировано его использование. Имеется возможность инициализации свойств класса при помощи константы, при этом использование любого вида выражений недопустимо:

class Animal
{
    private $name = "Leo"; // Корректный оператор
    private $name = "L"."e"."o"; // Ошибочный оператор
}

Описание класса не может быть разорвано HTML-кодом; весь класс целиком должен быть описан в рамках единой секции <?php...?>. Кроме того,поскольку в РНР имеется ряд встроенных методов, названия которых начинаются с символов __ (два подчеркивания), не следует использовать их в начале названий собственных методов.

Key Words for FKN + antitotal forum (CS VSU):

mariyas's picture

Добавлено: "замечание 2"