【发布时间】:2011-04-24 19:19:18
【问题描述】:
如何原位覆盖 php 中的类方法,即不扩展它?
如果可以,我会延长,但我不能。
【问题讨论】:
标签: php methods overriding
如何原位覆盖 php 中的类方法,即不扩展它?
如果可以,我会延长,但我不能。
【问题讨论】:
标签: php methods overriding
你的意思是重载方法?你不能。 PHP 不支持重载。您要么必须在同一个类中创建一个新方法,要么在子类中覆盖它。
..或者除了 __call() 和 __callStatic() 方法之外的情况。这些允许您将方法名称和参数作为参数传递。您可以检查方法名称和参数以模拟重载。如果参数不同但方法名相同,则做不同的事情。
【讨论】:
可能已在此question here 中得到回答。简短的回答,您可以使用 PHP 的 runkit 来完成,但它看起来非常过时(即自 2006 年以来没有被触及)并且可能不再工作。
您最好的选择可能是重命名原始类,然后使用具有原始名称的新类对其进行扩展。那是
class bad_class {
public function some_function {
return 'bad_value';
}
}
变成
class old_bad_class {
public function some_function {
return 'bad value';
}
}
class bad_class extends old_bad_class {
public function some_function {
return 'good value';
}
}
【讨论】:
无需扩展,您可以从一个类调用另一个类的方法。但这是一种不好的做法。
class First
{
public function doIt()
{
echo 'Done';
}
}
class Second
{
public function doIt()
{
$first = new First;
$first->doIt();
}
}
【讨论】: