如何在原位覆盖php中的类方法,即不扩展它?
如果可以,我会延长,但我不能。
答案 0 :(得分:3)
可能已在此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';
}
}
答案 1 :(得分:1)
你的意思是重载方法?你不能。 PHP不支持重载。您必须在同一个类中创建一个新方法,或者在子类中重写它。
..或者除了__call()和__callStatic()方法之外的情况。这些允许您将方法名称和参数作为参数传递。您可以检查方法名称和参数以模拟重载。如果参数不同但方法名称相同,则执行与正常情况不同的操作。
答案 2 :(得分:-1)
如果没有扩展,你可以从另一个类中调用方法。但这是一种不好的做法。
class First
{
public function doIt()
{
echo 'Done';
}
}
class Second
{
public function doIt()
{
$first = new First;
$first->doIt();
}
}