没有任何东西可以让你做
class Foo extendsIfExist Bar
Run Code Online (Sandbox Code Playgroud)
但是你可以用猴补丁美孚runkit的
PHP手册示例:
class myParent {
function parentFunc() {
echo "Parent Function Output\n";
}
}
class myChild {
}
runkit_class_adopt('myChild','myParent');
myChild::parentFunc();
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我们想要的功能是log()
.因此,我们不是检测记录器类是否可用,然后将此功能伪装到我们的Foo类中,而是通过添加接口Loggable来告诉它需要此功能.如果存在Logger类,我们在Foo中实例化并聚合它.如果它不存在,我们仍然可以调用日志,但它不会做任何事情.这更加稳固.
归档时间: |
|
查看次数: |
4102 次 |
最近记录: |