powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, ОПП) Влияет ли наследование классов на производительность?
18 сообщений из 18, страница 1 из 1
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207387
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Требуется ваш совет по вопросу наследования классов. :)

На примере... допустим есть пара классов, предназначенных для обработки данных с различными структурами таблиц в базе данных: линейная и иерархическая (в виде дерева) структуры. Необходимо, чтобы можно было добавлять, редактировать, удалять и выводить данные через один интерфейс для разных таблиц. Т.е. в зависимости от типа структуры таблицы запускать соответствующую обработину.

Код: plaintext
1.
2.
3.
DB_TableObject      - базовый класс, предназначенный для хранения и обработки общих свойств классов-потомков
DB_StandartTable    - класс, работающий с линейными структурами таблиц
DB_TreeTable        - класс, работающий с иерархическими структурами таблиц

"Прототипы" классов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
<?php
// ----------------------------------------------------------------------------------
// Классы, предназначенные для обработки различных типов таблиц в БД

// ----------------------------------------------------------------------------------
// Базовый класс (является наследуемым для всех остальных классов)
 
class DB_TableObject {

	var $tablename;		// имя таблицы
	var $primary_key;	// имя первичного ключа в таблице
	
	// .............
	
	function DB_TableObject($tbl, $p_key)
	{
		$this->tablename      = $tbl;
		$this->primary_key    = $p_key;
	}
	
	// .............
}

// ----------------------------------------------------------------------------------
// Класс DB_StandartTable работает с линейными структурами таблиц в БД

class DB_StandartTable extends DB_TableObject {
    
    // .............
    
    function DB_StandartTable($tbl, $p_key)
    {
        $this->DB_TableObject($tbl, $p_key);
        
        // .............
    }
    
    // .............
    
/******
 * Формирует SQL-запрос для команды DELETE
 * Возвращает SQL-запрос
 ***/
    function getDeleteSqlQuery()
    {
        return 'DELETE FROM '.$this->tablename.' WHERE '.$this->primary_key.'='.$_POST[ $this->primary_key ];
    }
    
    // .............
}


// ----------------------------------------------------------------------------------
// Класс DB_TreeTable работает с иерархическими структурами таблиц в БД

class DB_TreeTable extends DB_TableObject {
    
    // .............
    
    function DB_TreeTable($tbl, $p_key)
    {
        $this->DB_TableObject($tbl, $p_key);
        
        // .............
    }
    
    // .............
    
/******
 * Формирует SQL-запрос для команды DELETE
 * Возвращает SQL-запрос
 ***/
    function getDeleteSqlQuery()
    {
        return 'DELETE FROM '.$this->tablename.' WHERE '.$this->primary_key.'='.$_POST[ $this->primary_key ];
    }
    
    // .............
}
?>

Теперь суть вопроса:

Когда я решил немного заняться "рефакторингом", то обнаружил, что часть методов (пара методов) класса DB_TreeTable совпадает с методами класса DB_StandartTable. Например - getDeleteSqlQuery().
Стоит ли из-за двух методов сделать класс DB_TreeTable потомком класса DB_StandartTable (типа class DB_TreeTable extends DB_StandartTable)? А остальные методы "переопределить"...
По смыслу вроде бы вполне логично так реализовать (с точки зрения ОПП). :)

Насколько "наследование" в PHP "увеличивает" нагрузку на сервер или "наследование классов" никак не влияет на производительность?


Заранее благодарю! :)
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207444
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Насколько "наследование" в PHP "увеличивает" нагрузку на сервер или
> "наследование классов" никак не влияет на производительность?

производительность снизится на 7.8 секунд/метр_кубический :-|
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207453
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>"наследование классов" никак не влияет на производительность?
Влияет.. причем зависимость печально нелинейая. Есть шанс, что при наличии большого количества родителей при исполнении скрипта время затраченное на определение родителей больше, чем на исполнение скрипта. В цифрах ничего не могу сказать. Попробуй написать профайлер и оценить скорость исполнения.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207459
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4m@t!c>"наследование классов" никак не влияет на производительность?
Влияет.. причем зависимость печально нелинейая. Есть шанс, что при наличии большого количества родителей при исполнении скрипта время затраченное на определение родителей больше, чем на исполнение скрипта. В цифрах ничего не могу сказать. Попробуй написать профайлер и оценить скорость исполнения.

откуда такие данные и как проводилось тестирование ?
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207466
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.-.-.-.-.-> Насколько "наследование" в PHP "увеличивает" нагрузку на сервер или
> "наследование классов" никак не влияет на производительность?

производительность снизится на 7.8 секунд/метр_кубический :-|
Можно конечно и поприкалываться... но опыта работы у меня пока не так и много. Иначе бы не спрашивал

Вообще влияет ли на производительность разбор "какой класс что наследует и какие методы переопределяются"?
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207488
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 4m@t!c
откуда такие данные и как проводилось тестированиеДа, мне тоже интересно узнать, где можно почитать про это. :)

Конкретно в моем случае получается, что класс DB_TreeTable наследуется от двух классов. Причем в нем "переопределяются" порядка 10 методов и 2 "наследуются" от DB_StandartTable.
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207495
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опыт не мой. Когда-то зашел разговор о ООП и наследовании и т.д. Действительно опытный человек упомянул, что если много наследовать и переопределять - это порочная практика, так как скорость исполнения заметно снижается.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207517
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4m@t!cОпыт не мой. Когда-то зашел разговор о ООП и наследовании и т.д. Действительно опытный человек упомянул, что если много наследовать и переопределять - это порочная практика, так как скорость исполнения заметно снижается.
----------------------------------------
Артисты не приехали, приехали цыганеТ.о. образом не стОит заморачиваться на наследовании из-за двух методов? :)
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207528
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что не стОит.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207559
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-первых, большое дерево наследования выглядит очень подозрительно (под большим я имею ввиду более 3 уровней). Причем не в плане скорости а в плане проектирования. Здесь стоит обратить внимание на делегирование, но это именно концептуальное улучшение, а не оптимизация скорости.

Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ? (это вопрос лично автору топика).
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207561
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Думаю, что не стОит.

thx, 4m@t!c!
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207565
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.-.-.-.-.-Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ? в смысле, в родительский класс
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207582
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.-.-.-.-.-
Во-вторых, почему эти 2 метода нельзя вынести в родительский класс?
возник аналогичный вопрос - не успел запостить...;))))
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207590
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Не там ищете. Наследование - это самое узкое место в вашем коде?
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207593
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Во-первых, большое дерево наследования выглядит очень подозрительно (под большим я имею ввиду более 3 уровней)

Если делать так как показано на прототипах классов, то получится как раз 3 уровня (2 родительских класса, 1 потомок).


> Здесь стоит обратить внимание на делегирование

А что значит "делегирование"? :)


> Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ?

В конкретном случае (в проекте) это было бы не совсем логично (по смыслу класса). Хотя возможно вы и правы :)
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207599
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Не там ищете.А где следует искать?

*Наследование - это самое узкое место в вашем коде?В каком смысле "узкое"?
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33207858
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Berkut *Не там ищете.А где следует искать?Программы = алгоритмы + структуры данных. Вы уже искали в этих двух слагаемых? *Наследование - это самое узкое место в вашем коде?В каком смысле "узкое"?В буквальном. В плане затрат временнЫх ресурсов.
...
Рейтинг: 0 / 0
(PHP, ОПП) Влияет ли наследование классов на производительность?
    #33208023
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.-.-.-.-.-Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ? (это вопрос лично автору топика).Хотя возможно вы и правы :)
Решил так и сделать :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class DB_StandartTable {

	var $tablename;		// имя таблицы
	var $primary_key;	// имя первичного ключа в таблице

    // .............
    
    function DB_StandartTable($tbl, $p_key)
    {
		$this->tablename      = $tbl;
		$this->primary_key    = $p_key;
       
        // .............
    }
    
    // .............
}

class DB_TreeTable extends DB_StandartTable {
    // .............
}

*Программы = алгоритмы + структуры данных. Вы уже искали в этих двух слагаемых?Не совсем догоняю хода ваших мыслей... какое отношение "алгоритмы + структуры данных" имеют к "наследованию классов"?
Полагаю, что вы клоните в неверному проектированию, так? :)

*Наследование - это самое узкое место в вашем коде?
Нет. Просто вчера решил "остановиться" и посмотреть/проверить что получается, и обнаружил, что некоторые однотипные операции (обработки) повторяются в разных классах. Собственно поэтому и возник такой вопрос "Как лучше и правильнее сделать?". Имхо, ничего плохого в такой практике не вижу, чтобы на определенном этапе "улучшить" код :)

Что касается поиска "алгоритмов + структуры данных", то если честно, не искал.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, ОПП) Влияет ли наследование классов на производительность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]