2010-06-28 5 views
0

В PHP 5 и более поздних версиях, что быстрее - interface или abstract class?PHP абстрактный класс vs интерфейс (производительность)

abstract class MyPluginModel { 

против

interface MyPluginModel { 

Любые идеи, как они соотносятся с точки зрения памяти и времени выполнения?

+3

Вы не должны этого хотеть. – zerkms

ответ

1

интерфейс и абстрактный класс не сопоставимы с точки зрения производительности. На самом деле невозможно сказать, сколько памяти будет содержать абстрактный или тип интерфейса, поскольку они оба содержат только ссылки на какой-либо конкретный объект, который наследует их по иерархии наследования.

+0

«сколько памяти будет содержать абстрактный или тип интерфейса, поскольку они оба содержат только ссылки на какой-либо конкретный объект, который наследует их по иерархии наследования» - у меня есть проблема с этим утверждением; само определение занимает пространство - вероятно, больше, чем любой объект, за исключением объектов, содержащих большое количество данных. – Artefacto

+0

Вы правы. Но он будет меняться для каждого типа, который реализует интерфейс или наследует от абстрактного типа. –

9

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

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

Для получения дополнительной информации сравните: zend_do_implement_interface, zend_do_inheritance.

Что касается памяти, не должно быть существенной разницы, то оба интерфейса и абстрактные классы используют same data structure.

4

Знаменитая цитата: «Мы должны забыть о небольшой эффективности, скажем, около 97% времени: преждевременная оптимизация - это корень всего зла», Дональд Кнут.

Я действительно думаю, что вы делаете преждевременную оптимизацию, когда думаете об этом.

Смежные вопросы