Основы php, урок 9 — Объекты

Php Tutorial ~ [ wwweb.uz ]

PHP это объектно-ориентированный язык, однако некоторые функции PHP не являются объектно-ориентированными.

В объектно-ориентированном программировании класс является определением объекта, а объект — экземпляром класса, это значит, что из одного класса можно создать множество объектов.

Создадим класс студентов student.

class Student {
    // конструктор
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    public function say_name() {
        echo "Меня зовут " . $this->first_name . " " . $this->last_name . ".\n";
    }
}

$alex = new Student("Леша", "Ушлый");
$alex->say_name();

Класс Student содержит функцию __construct, которая выполняется при создании объекта. Конструктор получает аргументы, которые позже предоставляются при построении объекта с новым ключевым словом.

После того, как мы создали объект и присвоили его переменной $alex, мы можем использовать методы объекта.

Применим метод say_name объекта, который выведет имя студента. Функция say_name не принимает никаких аргументов, но имеет доступ к имени и фамилии студента, потому что она была объявлена ранее через конструктор.

Приведем основные определени относящиеся к объектам:

  • Классы определяют поведение объектов. Классы не содержат данных.
  • Объекты являются экземплярами классов, они содержат данные.
  • Члены это переменные, принадлежащие объекту.
  • Методы это функции принадлежащие объекту, и имеющие доступ к его членам.
  • Конструктор это специальный метод, который выполняется при создании объекта.

Наследование

Одной из наиболее важных характеристик объектно-ориентированного программирования является наследование.
Это свойство позволяет повторно использовать написанный код и расширять его. К примеру, нам нужно определить математический класс, который может складывать два числа.

class Student {
    // конструктор
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    public function say_name() {
        echo "Меня зовут " . $this->first_name . " " . $this->last_name . ".\n";
    }
}

$alex = new Student("Леша", "Ушлый");
$alex->say_name();

class MathStudent extends Student {
    function sum_numbers($first_number, $second_number) {
        $sum = $first_number + $second_number;
        echo $this->first_name . " утверждает, что " . $first_number . " + " . $second_number . " равно " . $sum;
    }
}

$eric = new MathStudent("Эрик", "Чанг");
$eric->say_name();
$eric->sum_numbers(3, 5);

Обратите внимание, что объект Эрик использует тот же конструктор и функцию say_name, и вдобавок новый метод sum_numbers, который помогает Эрику вычислить сумму двух чисел. Новая функция имеет доступ к тем же членам, которые были определены ранее в классе Student (first_name, last_name).

Открытые (public) и закрытые (private) функции

Мы можем использовать модификаторы public и private соответственно для определения функций, к которым можно получить доступ извне объекта или нет, в целях инкапсуляции.
Это дает лучшее понимание использования объектов, для разделения функций на те, которые используются только внутри класса, и на те, которые доступны извне.

class Student {
    // конструктор должен быть public
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    // для общего доступа
    public function say_name() {
        echo "Меня зовут " . $this->full_name() . "\n";
    }

    // для внутреннего использования
    private function full_name() {
        return $this->first_name . " " . $this->last_name;
    }
}

$alex = new Student("Леша", "Ушлый");

$alex->say_name();

// функция full_name() не отработает
// echo $alex->full_name();
// т.к. ее модификатор private

Упражнение

Создайте класс Car с конструктором, который получает бренд (brand) и год (year) машины. Затем создайте функцию print_details, которая выведет на экран информацию о машине.

Например, для машины Toyota, 2006 года выпуска, должна быть напечатана следующая строка:

Эта машина марки Toyota, 2006 года выпуска.

Источник: www.learn-php.org

КатегорииPhpМетки
У нас на сайте можно магазин в любое время.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *