如何就地重写 php 方法

发布于 2024-09-26 22:42:08 字数 55 浏览 2 评论 0原文

如何就地重写 php 中的类方法,即不扩展它?

如果可以的话我会延长,但我不能。

How do I override a class method in php in situ, i.e. without extending it?

I would extend if I could, but I cant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

同展鸳鸯锦 2024-10-03 22:42:09

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

class First
{
   public function doIt()
   {
      echo 'Done';
   }
}

class Second
{
   public function doIt()
   {
      $first = new First;
      $first->doIt();
   }   
}

Without extending you can call method from one class in other. But it is a bad practice.

class First
{
   public function doIt()
   {
      echo 'Done';
   }
}

class Second
{
   public function doIt()
   {
      $first = new First;
      $first->doIt();
   }   
}
旧城烟雨 2024-10-03 22:42:08

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

..或者除了 __call() 和 __callStatic() 方法之外都是这种情况。这些允许您将方法名称和参数作为参数传递。您可以检查方法名称和参数来模拟重载。如果参数不同但方法名称相同,则执行与平常不同的操作。

You mean overload the method? You can't. PHP does not support overloading. You either have to create a new method in the same class or override it in a child class.

..or that would be the case except for the __call() and __callStatic() methods. These allow you to pass the method name and arguments as parameters. You can check the method name and the arguments to simulate overloading. If the arguments are different but the method name is the same, do a different thing than normal.

携余温的黄昏 2024-10-03 22:42:08

可能已经在此处的问题中得到了解答。简短的回答是,您可以使用 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';
    }
}

May have already been answered in this question here. Short answer, you can do it with PHP's runkit, but it looks horribly out of date (ie hasn't been touched since 2006) and may no longer work.

Your best bet may be to rename the original class and then extend it with a new class with the original name. That is

class bad_class { 
    public function some_function {
        return 'bad_value';
    }
}

becomes

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';
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文