2017-02-14 2 views
-1

Есть ли способ переопределить функцию внутри класса, не затрагивая классное кодирование?Функция переопределения PHP внутри класса извне

У нас есть класс, скажем, он находится в foo.php:

class WPSEO_Frontend { 
     public function head() { 
      echo '<!--/', $this->head_product_name(), ". -->\n\n"; 
      return; 
     } 
} 

Так что без изменения этого класса выше, есть способ, чтобы удалить эту echo извне класса, как (я знаю, что ниже пример не будет работать):

bar.php

class WPSEO_Frontend overrides head { 
     echo ''; 
     return; 
} 
+0

У вас нет возможности продлить класс для переопределения общедоступного метода, например, если вы не можете каким-либо образом изменить вызывающий код для использования другого класса? –

+0

@MichaelBerkowski Извините, я не понимаю вашего вопроса – Mitch

+0

Что я имею в виду, нормальный способ справиться с этим в PHP (и многих других языках) - это создать класс типа 'класс WPSEO_Frontend_Subclass, который расширяет WPSEO_Frontend {}' и просто переопределяет метод там. Но если у вас нет доступа к коду, который вызывает 'new WPSEO_Frontend()', чтобы иметь возможность подставить ваш подкласс, это не поможет. –

ответ

0

PHP не поддерживает функцию времени выполнения, например swiftling, например, язык Swift.

Что вы должны сделать, это создать класс «WPSEO_Frontend_Base», а затем создать другой дочерний класс WP_SEO_Frontend, который выходит из него, переопределяет функцию head().

Вот некоторые примеры кода:

wpseo.frontend.base.php

class WPSEO_Frontend_Base { 
     public function head() { 
      echo '<!--/', $this->head_product_name(), ". -->\n\n"; 
      return; 
     } 
} 

wpseo.frontend.php

require 'wpseo.frontend.base.php'; 

class WPSEO_Frontend extends WPSEO_Frontend_Base { 
    function head(){ 
    // Override head() here 
    } 
} 
+1

* «функция swizzling» * - это новомодный способ сказать [* патч обезьяны *] (https://en.wikipedia.org/wiki/Monkey_patch)? – naomik

+0

Да, похоже. – ablopez

+0

Это помогает. Благодаря! – Mitch

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