Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_shilina.doc
Скачиваний:
6
Добавлен:
19.09.2019
Размер:
275.46 Кб
Скачать
  1. Реализация наследования в php5.

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

Говоря простыми словами наследование, это такой механизм, который позволяет расширять класс за счет методов другого класса. Для того, чтобы наследовать методы и свойства другого класса, необходимо воспользоваться оператором 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]