PHP ООП. Урок 2: Методы класса

PHP ООП. Урок 2: Методы класса.



Предыдущие уроки:

PHP ООП. Урок 1: Обьекты и классы


О методах и конструкторе

По сути это те же функции, только они как и поля (переменные) относятся к классу. И к тем и к другим доступ можно получить, создав объект класса (исключение - статические поля и методы, но о них позже).

Объявление метода сводится к простому объявлению функции внутри класса, т.е внутри фигурных скобок, обычно после полей.
Также существуют специальные методы, которые романтики PHP называют волшебными. Такие методы выполняют особые задания, вызываются самим PHP, по определенным событиям и начинаются с двойного подчеркивания (__).
Самый известный из волшебных методов - конструктор (__construct()), по сути он есть в каждом ООП языке, различается только сигнатура его объявления.
Конструктор это первый метод, который автоматически выполняется (т.е его не надо отдельно вызывать), когда мы создаем объект и служит для его первичной инициализации (т.е для внесения начальных значений в поля, и иногда некоторой начальной настройки).
Разберем эти два важных элемента класса по порядку. Будем идти от простого к более сложному, разбирая примеры кода.

Подробнее о методах


Для примера определим два метода в классе, с названием, например Test2:

class Test2 {
    /* Поля */
    private $nick = "";

    /* Методы */
    // Устанавливаем значение поля класса $nick
    function setNick($nick) {
        $this->nick = $nick;
    }

    // Приветствуем $nick-а
    function hello() {
        echo 'Привет, '.$this->nick;
    }
}

В данном примере у нас в классе Test2 одно поле и два метода.
Первый метод устанавливает значение поля $nick. На самом деле как мы помним из предыдущего урока, задавать значения полям класса можно и напрямую, если они объявлены как public.
Однако такой подход весьма не безопасен, - неопытный пользователь класса, или взломщик, может записать любое значение в это поле.
На самом деле, мы определили метод setNick в стиле Java, и он толком ни чего не делает, кроме присваивания значения полю.
В реальной же программе, перед установкой значения полю, в этом методе следует провести различного рода проверки, на корректность значения.


В простейшем случае мы хотим убедиться, что переданный аргумент $nick - не пустая строка:

function setNick($nick) {
    if($nick != '') {
        $this->nick = $nick;
        return $this->nick;
    } else {
        return false;
    }
}

Мы взяли наше присваивание и включили внутрь условия. Также, чтобы пользователь мог проверять присвоилось или нет значение полю $nick, мы добавляем оператор return.
На самом деле в первом случае, достаточно возвратить true, но для большей красноречивости и на случай добавления функций текстовой обработки мы возвращаем сам присвоенный ник. Поскольку мы знаем, что это не пустая строка, то в условиях, таких как if он будет преобразован в значение true автоматически.

Второй метод просто отображает приветствие с указанным ником. Воспользоваться нашим классом мы можем так:

$t2 = new Test2();
$t2->setNick('qcc');
$t2->hello();

Поскольку мы знаем что метод установки ника возвращает сам ник либо false, то можем произвести проверку:

$t2 = new Test2();
if($t2->setNick('qcc')) {
    $t2->hello();
} else {
    echo 'Не удалось установить никнейм.';
}

Как мы видим для вызова метода после создания объекта, мы к имени переменной, указывающей на объект, применяем оператор стрелка: -> (да да это минус и знак больше). Затем идет собственно имя метода, его остальная сигнатура аналогична обычной функции.
Теперь обсудим чем бы в подобной ситуации нам бы мог помочь конструктор.

Подробнее о конструкторе


На самом деле мы могли бы задать значение для нашего поля $nick и без вызова setNick(), если бы мы определили в классе конструктор. А setNick() мы бы тогда использовали для изменения значения поля $nick.
Конструктор обычно определяют в классе в классе после определения полей, но до других методов. Вот так:

class MyClassName {
    // поля
    // конструктор
    // другие методы
}

Не забывайте, что конструктор, также является методом, хоть и волшебным.

Так что наш класс приобретает такой вид:

class Test2 {
    /* Поля */
    private $nick = "";

    /* Конструктор */
    // Вызывается при создании нового объекта
    function __construct($nick) {
        $this->nick = $nick;
    }

    /* Методы */
    // Устанавливаем значение поля класса $nick
    function setNick($nick) {
        $this->nick = $nick;
    }

    // Приветствуем $nick-а
    function hello() {
        echo 'Привет, '.$this->nick;
    }
}

Естественно раз есть конструктор, значит может быть и деструктор. В ООП PHP это волшебный метод __destruct.
Применяется он не так часто, но, если вам нужно выполнить какие-то команды, по случаю удаления объекта из памяти он вполне вам в этом поможет.


В следующим уроке поговорим о статических полях и методах.
образованиепрограммированиеакадемияphpооп
51
2.611 GOLOS
0
В избранное
Руслан Дорофеев
Сетевое программирование
51
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (3)
Сортировать по:
Сначала старые