是否可以动态扩展类?

2022-08-30 14:47:59

我有一个类,我需要根据标准使用它来扩展不同的类(最多数百个)。在 PHP 中,有没有办法通过动态类名来扩展类?

我假设它需要一个方法来指定具有实例化的扩展。

想法?


答案 1

虽然它仍然不可能,不完全是你的答案,我需要同样的东西,不想使用eval,猴子补丁等。所以我通过在条件中扩展它来使用默认类。

当然,这意味着如果你有100个类要扩展,你需要用另一个扩展操作添加100个条件,但对我来说,这看起来是正确的方式。

<?php
if(class_exists('SolutionClass')) {
    class DynamicParent extends SolutionClass {}
} else {
    class DynamicParent extends DefaultSolutionClass {}
}

class ProblemChild extends DynamicParent {}
?>

答案 2

是的。我喜欢eval的答案,但是很多人害怕他们的代码中的任何eval,所以这里有一个没有eval的:

<?php //MyClass.php 
namespace my\namespace;
function get_dynamic_parent() {
    return 'any\other\namespace\ExtendedClass';// return what you need
}
class_alias(get_dynamic_parent(), 'my\namespace\DynamicParent');

class MyClass extends DynamicParent {}

推荐