5

これをもっとうまく説明する方法がわからないので、(2番目のクラス内のコメントを参照してください):

<?php

    class main {
        public function something() {
            echo("do something");
        }
        public function something_else() {
            $child=new child();
            $child->child_function();
        }
    }

    class child {
        public function child_function() {
            echo("child function");
            //is it possible to call main->something() here somehow if this class is initiated inside class main?
        }
    }

?>
4

4 に答える 4

3

いいえ。オブジェクトは、単に上位のスコープのものにアクセスできるわけではありません。明示的mainに渡す必要があります:child

$child->child_function($this);
于 2012-09-20T09:00:37.120 に答える
0

子オブジェクトを main で拡張できます。これにより、子は$this->something();
を呼び出して親クラスにアクセスできます。メイン クラスのメンバーになり、すべてのプロパティとメソッドにアクセスできるようになります。

<?php    
    class main {
        public function something() {
            echo("do something");
        }
    }

    class child extends main {
        public function child_function() {
            echo("child function");
            //is it possible to call main->something() here somehow if this class is initiated inside class main?
            $this->something();
        }
    }

?>

両方で __construct() したい場合は、次のことができます。

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

これはすべてのメソッドに当てはまります。

于 2012-09-20T09:07:37.690 に答える
0

関数something_elseを public として定義したので、メイン クラスのオブジェクトを作成した後にアクセスできます。

于 2012-09-20T09:03:19.307 に答える
0

これを試して、

    class main {
        public function something() {
            echo("do something");
        }
        public function something_else() {
            $child=new child($this);
            $child->child_function();
        }
    }

    class child {
        protected $_main;
        public function __construct($main)
        {$this->_main = $main;}
        public function child_function() {
            echo("child function");
             $this->_main->something();
        }
    }

?>
于 2012-09-20T09:03:22.813 に答える