gpt4 book ai didi

php - 动态类扩展

转载 作者:可可西里 更新时间:2023-11-01 13:36:42 26 4
gpt4 key购买 nike

有没有办法定义一个类,使其仅在另一个类可用时才扩展另一个类?

最佳答案

没有什么可以让你做

class Foo extendsIfExist Bar

但是你可以用 runkit 来猴子修补 Foo的

PHP 手册中的示例:

class myParent {
function parentFunc() {
echo "Parent Function Output\n";
}
}

class myChild {
}

runkit_class_adopt('myChild','myParent');
myChild::parentFunc();

runkit 扩展可从 PECL 获得。但是,不鼓励使用它,因为需要它几乎总是设计有缺陷的指标。


免责声明:我只是假设类似于以下示例的内容是您提出问题的原因。如果不是,请忽略那部分答案。

如果您在运行时有条件地需要某些功能,请考虑聚合您想要扩展的类,例如尝试一些类似的东西

interface Loggable
{
public function log($message);
}
class Foo implements Loggable
{
protected $logger;
public function setLogger($logger)
{
$this->logger = $logger;
}
public function log($message)
{
if($this->logger !== NULL) {
return $this->logger->log($message);
}
}
}

在上面的例子中,我们想要的功能是log()。因此,我们不是检测记录器类是否可用然后将此功能猴子修补到我们的 Foo 类中,而是通过添加接口(interface) Loggable 告诉它需要此功能。如果存在 Logger 类,我们将其实例化并聚合到 Foo 中。如果它不存在,我们仍然可以调用 log 但它不会做任何事情。这更多 solid .

关于php - 动态类扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4681995/

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