我正在为提供几个基类(假设其中一个类称为Base
)的CMS创建插件。这个类有一些帮助器方法,它们必须在扩展类中被覆盖。我们应该注意,基本方法提供了默认参数/值。在LMS的一个版本中,这些值仅由值在下一个版本中通过引用提供。基于Parent方法的默认参数的扩展类(覆盖)方法的条件声明
例如(CMS V1.0):
function prepareTable(&$table){...
CMS V1.1:
function prepareTable($table){...
当扩展Base
类并覆盖prepareTable
方法您与声明它相同的默认参数/值,否则将显示STRICT PHP警告(在PHP 5.4中默认打开)。
我的问题是,如何知道父CMS的版本,以有效的方式有条件地覆盖父类的方法?
这是我目前有(目前不工作):
class Base{
function prepareTable(&$table){
}
}
class Extending extends Base{
if(CMS_VERSION=='1.0')
function prepareTable(&$table){
else
function prepareTable($table){
echo $table;
}
}
很显然,我不能直接编辑0及其方法。
编辑:这里是确切的错误信息:
Strict standards: Declaration of Extending::prepareTable() should be compatible with Base::prepareTable($table) in.
我会保持'函数prepareTable(&$表){'(参考),但只改变$表如果CMS_VERSION是 '1.0'。也就是说'$ temp = $ table;'(copy)并在离开函数之前if(CMS_VERSION =='1.0')$ table = $ temp;' – Waygood 2013-04-22 13:23:29
你能否精心策划。 CMS版本1.1中的基类方法将默认参数声明为仅值'$ table',如果我使用您的解决方案并将默认值作为引用保留扩展类方法,则显示STRICT PHP警告。 – 2013-04-22 13:29:05
啊!你有2个不同的基类。 v1是prepareTable(&$ table),v1.1是prepareTable($ table)。它是否正确? – Waygood 2013-04-22 13:31:25