gpt4 book ai didi

php - 有没有办法像在 javascript 中一样向 php 类添加方法?

转载 作者:行者123 更新时间:2023-12-03 22:33:50 24 4
gpt4 key购买 nike

我正在为 WooCommerce 编写一个插件,今天突然想到了一些事情,我在想是否有一种方法可以像我们在 JavaScript 中那样扩展 PHP 类,而不需要触及 PHP 类中的任何内容(因为 WooCommerce将得到更新,我们的更改将消失)。我找到了类似使用 __call 的解决方案方法,但就像我说的,不应该编辑该类。我希望能够使用这样的东西 WC()->My_custom_method()不接触 Woocommerce 类。这可能吗?

例如,在 JavaScript 中我们需要做的是:

Foo.prototype.bar = function (){
// ...
}
Foo.bar();

最佳答案

PHP 没有原型(prototype)继承,并且类没有像 JavaScript 中那样的原型(prototype)。您可以通过一些黑客技术来模拟您所要求的内容,但这最终会导致代码难以维护。所以不要去那里。

有一个 GitHub 项目 https://github.com/bdelespierre/prototype.php并进行概念验证实现。您可能会发现学习很有趣。

不用说,如果您的目的只是向类添加一些功能,您仍然可以使用 PHP 的继承,例如扩展 WooCommerce 类并在子类中添加您的修改。然后使用该新类的实例,例如

class MyClass extends SomeWooCommerceClass {
public function bar() {
// your own implementation of bar
}
}

$myObj = new MyClass();
$myObj->bar();

如果您的目标是更改现有对象实例的行为,请考虑将该实例包装到 Decorator 中,例如

class WooCommerceDecorator {
private $instance;
public function __construct(SomeWooCommerceClass $instance) {
$this->instance = $instance;
}

public function foo() {
$original = $this->instance->foo();
$original+= 42;
return $original;
}
// … more methods

然后通过将对象传递给装饰器来使用它:

$woo = new SomeWooCommerceClass();
$decoratedWoo = new WooCommerceDecorator($woo);
echo $decoratedWoo->foo();

另请参阅PHP manual on Inheritance

关于php - 有没有办法像在 javascript 中一样向 php 类添加方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41166903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com