Говорят, что создание сайта - очень длительный и трудоемкий процесс. Мы скажем - НЕТ! Ведь с новыми технологиями, такими как HTML5, CSS3, PHP и MySql можно быстро и легко научиться создавать сайты любой сложности.
Два сумасшедших веб-мастера покажут где что лежит и как этим пользоваться.
Авторизация
Новый
Забыл
Пожалуйста, заполните поля выше. Это нужно сделать обязательно, иначе ничего не получится.
PHP Статейки /

ООП в PHP 5 для начинающих. Часть 4-ая. Наследование.

  • Пятница, 12 ноября 2011, 16:33 |
  • Автор: fiamma |
  • Просмотров: 4910 |
  • Комментарии: 4 |
  • В закладки:
ООП в PHP 5 для начинающих. Часть 4-ая. Наследование.Сегодня мы продолжим изучать объектно-ориентированное программирование в PHP и рассмотрим работу такого механизма, как наследование классов.

ООП в PHP5: Часть 1-ая | Часть 2-ая | Часть 3-я

Насле́дование — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. (Википедиа)

Говоря простыми словами наследование, это такой механизм, который позволяет расширять класс за счет методов другого класса. Для того, чтобы наследовать методы и свойства другого класса, необходимо воспользоваться оператором extends. Например, чтобы создать второй класс, который расширяет MyClass и добавляет методы, вы должны добавить следующие строки в ваш тестовый файл:
<?php

class MyClass
{
    public $prop1 = "I'm a class property!";

    public function __construct()
    {
        echo 'The class "', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class "', __CLASS__, '" was destroyed.<br />';
    }

    public function __toString()
    {
        echo "Using the toString method: ";
        return $this->getProperty();
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}

class MyOtherClass extends MyClass
{
    public function newMethod()
    {
        echo "From a new method in " . __CLASS__ . ".<br />";
    }
}

// Создание объекта
$newobj = new MyOtherClass;

// Вывод объекта
echo $newobj->newMethod();

// Использование метода родительского класса
echo $newobj->getProperty();

?>


Замена унаследованных методов и свойств

Для того, чтобы заменить унаследованный метод родительского класса в новом классе, необходимо просто заменить этот метод в новом классе. При этом необходимо использовать то-же имя, которое было в родительском классе:
<?php

class MyClass
{
    public $prop1 = "I'm a class property!";

    public function __construct()
    {
        echo 'The class "', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class "', __CLASS__, '" was destroyed.<br />';
    }

    public function __toString()
    {
        echo "Using the toString method: ";
        return $this->getProperty();
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}

class MyOtherClass extends MyClass
{
    public function __construct()
    {
        echo "A new constructor in " . __CLASS__ . ".<br />";
    }

    public function newMethod()
    {
        echo "From a new method in " . __CLASS__ . ".<br />";
    }
}

// Создание объекта
$newobj = new MyOtherClass;

// Вывод объекта
echo $newobj->newMethod();

// Использование метода родительского класса
echo $newobj->getProperty();

?>

В результате мы получим:
A new constructor in MyOtherClass.
From a new method in MyOtherClass.
I'm a class property!
The class "MyClass" was destroyed.


Существую ситуации, когда необходимо заменив метод в новом классе, вызвать этот же метод, но только в родительском классе. В таких случаях используется оператор parent::

Пример:
<?php

class MyClass
{
    public $prop1 = "I'm a class property!";

    public function __construct()
    {
        echo 'The class "', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class "', __CLASS__, '" was destroyed.<br />';
    }

    public function __toString()
    {
        echo "Using the toString method: ";
        return $this->getProperty();
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}

class MyOtherClass extends MyClass
{
    public function __construct()
    {
        parent::__construct(); // Call the parent class's constructor
        echo "A new constructor in " . __CLASS__ . ".<br />";
    }

    public function newMethod()
    {
        echo "From a new method in " . __CLASS__ . ".<br />";
    }
}

// Создаем объект
$newobj = new MyOtherClass;

// Выводим объект
echo $newobj->newMethod();

// Использование метода родительского класса
echo $newobj->getProperty();

?>

В результате в окне браузера можно наблюдать:
The class "MyClass" was initiated!
A new constructor in MyOtherClass.
From a new method in MyOtherClass.
I'm a class property!
The class "MyClass" was destroyed.


Рынок коммерческого транспорта в настоящее время предлагает для предприятий широкий спектр услуг: продажа грузовых автомобилей и спецтехники, реализация строительной техники, автобусов и запасных частей к ним.
Добавить комментарий