首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在原地重写php方法

如何在原地重写php方法
EN

Stack Overflow用户
提问于 2010-10-13 19:40:43
回答 3查看 1.6K关注 0票数 2

我如何在php中原位重写一个类方法,也就是不扩展它?

如果可以的话,我会扩展的,但是我不能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-13 19:46:25

你的意思是重载这个方法?你不能。PHP不支持重载。您要么必须在同一个类中创建一个新方法,要么在一个子类中覆盖它。

除了__call()和__callStatic()方法之外,情况就是这样。它们允许您将方法名和参数作为参数进行传递。您可以检查方法名称和参数以模拟重载。如果参数不同,但方法名相同,则执行与正常不同的操作。

票数 1
EN

Stack Overflow用户

发布于 2010-10-13 20:15:45

可能已在此question here中得到应答。简而言之,你可以用PHP的runkit来做这件事,但它看起来非常过时(即自2006年以来就没有人碰过它),并且可能不再工作。

最好的办法可能是重命名原始类,然后使用原始名称扩展新类。那是

代码语言:javascript
复制
class bad_class { 
    public function some_function {
        return 'bad_value';
    }
}

变成了

代码语言:javascript
复制
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';
    }
}
票数 3
EN

Stack Overflow用户

发布于 2010-10-13 20:47:29

无需扩展,您就可以从一个类调用另一个类中的方法。但这是一种糟糕的做法。

代码语言:javascript
复制
class First
{
   public function doIt()
   {
      echo 'Done';
   }
}

class Second
{
   public function doIt()
   {
      $first = new First;
      $first->doIt();
   }   
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3923206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档