对象内的php对象,获取顶级对象实例

Tim*_*nen 5 php oop object

我正在尝试PHP OOP

我想要找到的是,是否可以通过使用在此对象实例中创建的对象来访问对象实例?

听起来令人困惑,所以这是一个例子:

索引的内容


    class mainclass {
        var $data;
        function __construct($data){
            $this->data = $data;
        }
        function echodata(){
            echo $this->data;
        }
        function start($classname){
            include $classname.'.php';
            $inner = new $classname();
            $inner->show();
        }

    }

    $mainclass = new mainclass('maininfostuff');
    $mainclass->start('innerclass');



    //i want it to echo "maininfostuff"
Run Code Online (Sandbox Code Playgroud)

innerclass.php的内容


class innerclass{
        function show(){
            mainclass->echodata();//the problem is here
        }
}
Run Code Online (Sandbox Code Playgroud)

这个测试用例的目的是让内部类决定是否/何时运行mainclass echodata函数

如何完成上述例子?(不依赖于静态类或单例或扩展类)

编辑: 由于答案中的一些混乱,我编辑了这个例子

Sco*_*ers 8

PHP中不可能使用内部类.所以你不能在mainclass中声明你的内部类.而且由于你无法做到这一点,因此无法访问外部类变量,例如Java.

你可以这样做:

 class mainclass {
     var $data;
     function __construct($data){
         $this->data = $data;
     }
     function echodata(){
         echo $this->data;
     }
     function start(){
         $inner = new innerclass();
         $inner->show($this);
     }

 }
 class innerclass{
     function show($mainclass){
         $mainclass->echodata();//the problem is here
     }
 }

 $mainclass = new mainclass('maininfostuff');
 $mainclass->start();
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

内部类访问外部类的唯一方法是将外部实例传递给内部类的构造函数并将其保存在实例变量中。


nic*_*ckf 5

我个人从来没有见过一前内的另一个类的方法来定义的,所以如果它实际上在所有工作,我大为吃惊。(我更惊讶于你为什么想要/需要这个,但无论如何......)

构造它时,只需将当前(外部)对象传递给内部对象。

class InnerClass {
    var $outer;
    function __construct(&$outer) {
        $this->outer = $outer;
    }
    function someStuff() {
        $this->outer->doStuff();
    }
}

$innerObj = new InnerClass($this);
Run Code Online (Sandbox Code Playgroud)