5

我不知道如何更好地解释这一点,所以(见第二课内的评论):

<?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

您已将该函数定义something_else为公共的,因此您可以在创建主类的对象后访问它。

于 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 回答
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 回答