首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的parent::parent

PHP中的parent::parent
EN

Stack Overflow用户
提问于 2011-11-21 20:47:42
回答 9查看 42.1K关注 0票数 49

我寻找一种方法来访问一个类的父函数,而不需要调用父函数……嗯,这听起来有点奇怪的解释,所以我举个例子:

代码语言:javascript
复制
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“,然后这样做:

代码语言:javascript
复制
class myclass3 extends myclass2
{
  public function test() { return parent::parent::test() . '-level 3'; }
}

你知道我该怎么做吗?(我不允许编辑myclass和myclass2,它们是框架的一部分...)

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-11-21 21:04:34

简单的解决方案。直接使用根对象myclass:

代码语言:javascript
复制
class myclass3 extends myclass2
{
  public function test() { return myclass::test() . '-level 3'; }
}

如果您需要更通用的方法,可以看看outis answer

票数 72
EN

Stack Overflow用户

发布于 2011-11-21 21:00:17

您可以使用get_parent_class完成此操作

代码语言:javascript
复制
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

代码语言:javascript
复制
function get_grandparent_class($thing) {
    if (is_object($thing)) {
        $thing = get_class($thing);
    }
    $class = new ReflectionClass($thing);
    return $class->getParentClass()->getParentClass()->getName();
}

然而,这可能不是一个好主意,这取决于你试图实现的目标。

票数 25
EN

Stack Overflow用户

发布于 2011-11-21 20:53:37

不,这不可能。不幸的是,不可能直接引用原始类,只能引用它的selfparent

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8212048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档