当使用继承和类别名时,获取顶级类名


Get top level class name when inheritance and class alias is used

我有一些类以这种方式扩展:

class Baseresidence extends CActiveRecord {
    public static function model($className=__CLASS__) {
        return parent::model($className); // framework needs, can't modify
    }    
}
class Site1Residence extends Baseresidence {
}

最后是

class_alias('Site1Residence', 'Residence'); // this is part of an autoloader

所以最后我有了这个Residence extends Site1Residence extends Baseresidence extends CActiveRecord

在Baseresidence中,我有一个静态方法model(),它检索一个实例。

现在我可以呼叫::

$r=Residence::model();

问题是__CLASS__常量被用作默认值,而在该级别上是Baseresidence,我需要顶级类名(用别名创建),它应该是"Residence"

如果我这样做:

echo get_class($r); // the Baseresidence is printed

目标是打印residence

我不想在调用$r=Residence::model();时传递任何信息,我想在根上解决它。

如何获得该级别的顶级类名?

尝试

get_called_class();

请参阅http://php.net/manual/en/function.get-called-class.php

来自文档:

class foo {
    static public function test() {
        var_dump(get_called_class());
    }
}
class bar extends foo {
}
foo::test();
bar::test();

上面的例子将输出:

string(3) "foo"
string(3) "bar"