ООП. Наследование
Четверг, 12 августа 2010 г.Рубрика: PHP программирование -> ООП
Метки: наследование
Просмотров: 834
Подписаться на комментарии по RSS
Наслелование в ООП - это когда у Вас есть какой - то класс и Вы
создаёте новый, но хотите чтобы все значения из старого класса перешли в
новый, тогда Вам понадобится наследование, с его помощью Вы сможете без труда передать данные из старого класса новому.
Давайте рассмотрим на примере:
Возьмём класс Stroki из предыдущего урока ( немного изменив его ) и
занесём его в файл stroki.class.php:
<?php
class Stroki {
var $cena = 20;
var $status = "good";
function Stroki ( $cn ) {
$this->cena = 20;
echo "Конструктор<br />";
}
function hello () {
$this->cena = 50;
}
function privet () {
return "Привет";
}
function set_cena ($cn) {
$this->cena = $cn;
}
}
И теперь создадим новый класс new_class и занесём его в файл
new_class.class.php
<?php
class new_class {
function hello () {
return "Hello Mr.Programmist";
}
}
$new_c = new new_class ();
echo $new_c->hello();
Здесь мы создали новый класс new_class и в него прописали функцию hello,
в которой вернули значение в виде строки приветствия.
Теперь объявим в файле с новым классом подключение файла со старым
классом:
<?php
require_once ( "stroki.class.php" );
class new_class {
function hello () {
return "Hello Mr.Programmist";
}
}
$new_c = new new_class ();
echo $new_c->hello();
Теперь на примере объясним Вам как работает наследование - мы как бы
прибавляем все имеющиеся значения от старого класса к новому, тем самым
из двух классов делаем один:
<?php
require_once ( "stroki.class.php" );
class new_class extends Stroki {
function hello () {
echo "Hello Mr.Programmist<br /><br />";
echo $this->cena;
}
}
$new_c = new new_class ();
echo $new_c->hello();
Теперь, если мы попробуем вывести функцию hello, то у нас выведется
строка и значение переменной cena, но оно будет стандартным, а не новым
как было бы в функцие hello из класса Stroki, но почему, ведь новый
класс должен унаследовать всё от старого, именно так, но у нас есть
новая функция hello, а такая же была и в старом классе, короче говоря
новая функция затёрла старую, но как нам получить доступ к старой
функцие из того же класса, ответ прост, нужно использовать комманду
parent, давайте рассмотрим на примере - выведем изменённое значение
переменной cena:
<?php
require_once ( "stroki.class.php" );
class new_class extends Stroki {
function hello () {
parent::hello();
echo "Hello Mr.Programmist<br /><br />";
echo $this->cena;
}
}
$new_c = new new_class ();
echo $new_c->hello();
Теперь после того как попробуем вывести цену, то у нас выведется 50, а
не 25, как и планировали.
При помощи команды parent мы указали функцию hello, тем самым дали
понять, что мы возьмём значение функции из наследуемого класса, а именно
Stroki, запись выглядит так: parent::znachenie;
Здесь пишем parent два двоиточия :: и наследуемое. Всё просто. Давайте
рассмотрим ещё на одном примере, возьмём создадим конструктор, и зададим
ему значение конструктора Stroki:
<?php
require_once ( "stroki.class.php" );
class new_class extends Stroki {
function new_class () {
parent::Stroki();
}
function hello () {
parent::hello();
echo "Hello Mr.Programmist<br /><br />";
echo $this->cena;
}
}
$new_c = new new_class ();
echo $new_c->hello();
Всё так же как и в примере до этого, понять это не сложно, поэтому мы
советуем Вам попрактиковаться в этой теме.
И запомните самое главное - прописать можно только один наследуемый
класс другому классу, больше одного нельзя.
Полный код урока:
Файл stroki.class.php
<?php
class Stroki {
var $cena = 20;
var $status = "good";
function Stroki ( $cn ) {
$this->cena = 20;
echo "Конструктор<br />";
}
function hello () {
$this->cena = 50;
}
function privet () {
return "Привет";
}
function set_cena ($cn) {
$this->cena = $cn;
}
}
Файл new_class.class.php
<?php
require_once ( "stroki.class.php" );
class new_class extends Stroki {
function new_class () {
parent::Stroki();
}
function hello () {
parent::hello();
echo "Hello Mr.Programmist<br /><br />";
echo $this->cena;
}
}
$new_c = new new_class ();
echo $new_c->hello();


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