PHP调用内部类父类方法而不扩展父

时间:2016-10-10 10:56:20

标签: php class parent overloading

是否可以在子类中调用parent方法,而不是扩展到其父级?我有类似的东西:

<?php

class wrapper {

    private $inner;

    public function __construct() {
        $this->inner = new inner();
    }

    // this will never get called :(
    public function foo() {
        echo "foo called in parent";
    }

    public function bar() {
        return $this->inner->bar();
    }

    public function getOtherStuff() {
        return $this->inner->blafasel;
    }
}

class inner { // would only be created in class wrapper, never outside

    public $blafasel;

    public function __construct() {
        // do something
        $this->blafasel = "other stuff";
    }

    public function bar() {
        // do stuff
        echo "bar called in inner";

        $this->foo();  // fatal error, method not declared
        parent::foo(); // fatal error, class has no parent
        // ??
        return "something"
    }
}

$test      = new wrapper();
$something = $test->bar();

?>

请不要问为什么我没有使用class inner extends wrapper。我必须像使用旧东西和其他必需品一样使用它。那么有可能在不使用静态的情况下调用wrapper :: foo吗?包装器正在使用内部和东西的一些公共变量 我在调用内部构造函数时尝试添加$this,但这只会导致内存溢出或只是包装器的反射。 那么是否可以在内部&#b; b()中调用包装器的foo()方法,或者我是否必须重写整个事物以便它可以使用扩展类?我知道我必须重写它,但这需要几周时间,我需要这件事......好吧..昨天。

感谢您提供任何帮助/提示/更正:)

修改

有更多的inner类将在包装器构造函数中调用,并且所有类都具有相同的方法,但执行不同的操作,取决于内部类本身。 (整个代码太长,即使对于pastebin而言)

一些片段:

class wrapper {
    public function __construct($loadclass=1) {
        if($loadstuff==1)
            $this->inner = new inner();
        else
            $this->inenr = new otherinner();
    }
}

然后

class otherinner {
    public function bar() {
        // doing different stuff than inner::bar()
        // but call wrappers foo() may with possible args
    }
}

我希望这将清除&#34;为什么不使用extends&#34;

1 个答案:

答案 0 :(得分:0)

class Inner extends Wrapper {

    public function __construct() {
         parent::foo();
    }

}

new Inner();

您当前的包装器需要注入内部对象,此包装器现在是内部将完成或扩展的

的部分对象

通过扩展部分类,扩展类继承了部分类。如果没有扩展程序,则没有“父母”。

您只是在代码中使用包装器作为依赖注入,而不是作为扩展。