我如何在php中原位重写一个类方法,也就是不扩展它?
如果可以的话,我会扩展的,但是我不能。
发布于 2010-10-13 19:46:25
你的意思是重载这个方法?你不能。PHP不支持重载。您要么必须在同一个类中创建一个新方法,要么在一个子类中覆盖它。
除了__call()和__callStatic()方法之外,情况就是这样。它们允许您将方法名和参数作为参数进行传递。您可以检查方法名称和参数以模拟重载。如果参数不同,但方法名相同,则执行与正常不同的操作。
发布于 2010-10-13 20:15:45
可能已在此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';
}
}发布于 2010-10-13 20:47:29
无需扩展,您就可以从一个类调用另一个类中的方法。但这是一种糟糕的做法。
class First
{
public function doIt()
{
echo 'Done';
}
}
class Second
{
public function doIt()
{
$first = new First;
$first->doIt();
}
}https://stackoverflow.com/questions/3923206
复制相似问题