强制动态加载的类来扩展或实现接口

任何人都知道在PHP中是否有可能强制类扩展或实现接口而子类不必声明它? 例:
interface Requirements
{
    public function __construct();
    public function kittens();
}

class DingleBerry
{
    public function __construct()
    {
        // yadda yadda yadda    
    }
}

// Example of my initial hope
// of what you could do

$kittens = new DingleBerry implements Requirements;
显然这不起作用,但我需要一种在没有预先了解接口要求但却被迫遵守它们的类中加载的方法。 我的总体目标是检查类是否在加载之前实现了需求,并且调用了它的构造函数。 所以我不能用这个:
interface Requirements
{
    public function __construct();
    public function kittens();
}

class DingleBerry
{
    public function __construct()
    {
        // DO BAD STUFF (i.e. eat your soul)
    }
}

// Example of what I CANNOT
// do.

$kittens = new DingleBerry;

if( !($kittens instanceof Requirements) )
{
    // eat pizza.    
}
因为在我检查它是否实现了要求之前调用了DingleBerry的构造函数。挖?     
已邀请:
如果不使用第三方扩展(例如:runkit),则无法修改已声明的类或接口定义。 Runkit有一个runkit_class_adopt函数可以满足这个需求。不幸的是我无法测试它,因为PECL版本无法在我的机器上编译。 对于问题的第一部分,您可以检查一个类是否实现了给定的接口而没有实例化它,并且没有Reflection API:
// checks if class Bar implements Foo
if (in_array('Foo', class_implements('Bar'))) {
    $foo = new Bar;
} else {
    throw new Exception('Interface not implemented');
}
    
未经测试但理论上这是API:
<?php
$reflection = new ReflectionClass('DingleBerry');
$reflection->implementsInterface('Requirements');
?>
http://php.net/manual/en/book.reflection.php http://mark-story.com/posts/view/using-the-php-reflection-api-for-fun-and-profit     

要回复问题请先登录注册