ООП. Наследование

Четверг, 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();
Поделиться...
twitter.com facebook.com vkontakte.ru mail.ru google.com bobrdobr.ru
Комментариев: 2
  1. Чиатаю и удивляюсь уже полгода занимаюсь скриптами постоянно , что новое.

  2. Да, мне тоже такой подход встретился впервые.

Оставьте свой комментарий!

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

Если вы уже зарегистрированы как комментатор, укажите пароль и свой действующий email.

(обязательно)