如何就地重写 php 方法
如何就地重写 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
无需扩展,您可以从一个类中调用另一个类中的方法。但这是一个不好的做法。
Without extending you can call method from one class in other. But it is a bad practice.
你的意思是重载该方法?你不能。 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.
可能已经在此处的问题中得到了解答。简短的回答是,您可以使用 PHP 的 runkit 来完成此操作,但它看起来非常过时(即自 2006 年以来就没有被触及过)并且可能不再工作。
最好的选择可能是重命名原始类,然后使用具有原始名称的新类来扩展它。即
成为
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
becomes