我寻找一种方法来访问一个类的父函数,而不需要调用父函数……嗯,这听起来有点奇怪的解释,所以我举个例子:
class myclass
{
public function test() { return 'level 1'; }
}
class myclass2 extends myclass
{
public function test() { return parent::test() . '-level 2'; }
}
class myclass3 extends myclass2
{
public function test() { return parent::test() . '-level 3'; }
}
$example = new myclass3();
echo $example->test(); // should display "level 1-level 2-level 3"我想显示"level 1-level 3“,然后这样做:
class myclass3 extends myclass2
{
public function test() { return parent::parent::test() . '-level 3'; }
}你知道我该怎么做吗?(我不允许编辑myclass和myclass2,它们是框架的一部分...)
发布于 2011-11-21 21:04:34
简单的解决方案。直接使用根对象myclass:
class myclass3 extends myclass2
{
public function test() { return myclass::test() . '-level 3'; }
}如果您需要更通用的方法,可以看看outis answer。
发布于 2011-11-21 21:00:17
您可以使用get_parent_class完成此操作
function get_grandparent_class($thing) {
if (is_object($thing)) {
$thing = get_class($thing);
}
return get_parent_class(get_parent_class($thing));
}
class myclass3 extends myclass2 {
public function test() {
$grandparent = get_grandparent_class($this);
return $grandparent::test() . '-level 3';
}
}或者,您可以使用reflection
function get_grandparent_class($thing) {
if (is_object($thing)) {
$thing = get_class($thing);
}
$class = new ReflectionClass($thing);
return $class->getParentClass()->getParentClass()->getName();
}然而,这可能不是一个好主意,这取决于你试图实现的目标。
发布于 2011-11-21 20:53:37
不,这不可能。不幸的是,不可能直接引用原始类,只能引用它的self或parent。
https://stackoverflow.com/questions/8212048
复制相似问题