PHP Override外部类功能
问题描述:
有没有办法在不触及类编码的情况下重写类内部的函数?PHP Override外部类功能
我们有课,让我们说这是位于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;
}
答
例如,PHP不支持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
}
}
你没有扩展能力该类重写公共方法,例如,如果无法以任何方式修改调用代码以使用不同的类? –
@MichaelBerkowski抱歉,我不了解你的问题 – Mitch
我的意思是,在PHP(和其他许多langs)中处理这个问题的正常方法是创建一个类,比如'class WPSEO_Frontend_Subclass extends WPSEO_Frontend {}',并重新定义方法那里。但是,如果您无法访问调用“新WPSEO_Frontend()”的代码以替代您的子类,那将无济于事。 –