引用'人造父母的财产......?

时间:2011-07-28 22:05:47

标签: php loading parent

我一直想知道以下情况: 我正在使用将一些(在这种情况下为“工具” - )类加载到“父”或“控制器”类的属性中的构造。更具体:

    class a
    {
        public $b;
        public $c;

        public function __construct()
        {
            $this->b = new b();
            $this->c = new c();
        }
    }
    class b
    {
        // Properties and methods of b.
    }
    class c
    {
        // Properties and methods of c.
    }
    $a = new a();

a和b(和c)之间的关系不是(分别)'父子'之一,因为只有一个实例。到目前为止,这么好,但是:目前我正在通过调用“全局”获取本地参考来访问类b或c中的类a成员...所以:

    class a
    {
        public $b;
        public $c;
        public $a_property = 'something something';

        public function __construct()
        {
            $this->b = new b();
            $this->c = new c();
        }
    }
    class b
    {
        public function test()
        {
            global $a;
            echo $a->a_property;
        }
    }
    class c
    {
        // Properties and methods of c.
    }
    $a = new a();
    $a->b->test();

这是:丑陋(我认为)和b :(我再也找不到任何文档/参考了)但是我相信从PHP 5开始(。?)以下应该是可能的:

    class a
    {
        public $b;
        public $c;
        public $a_property = 'something something';

        public function __construct()
        {
            $this->b = new b();
            $this->c = new c();
        }
    }
    class b
    {
        public function test()
        {
            echo $this->a_property;
        }
    }
    class c
    {
        // Properties and methods of c.
    }
    $a = new a();
    $a->b->test();

这不起作用......虽然服务器正在运行PHP 5.3.6 ...

奥卡姆剃刀:我可能对这个功能错了......! ; - )

3 个答案:

答案 0 :(得分:0)

由于b即使a实例化了a,也不会延长echo a::$a_property;,因此它应该能够通过b访问该属性,因为现在a为{{1}}范围到{{1}}类。

答案 1 :(得分:0)

我认为如果你想通过“$ this-> a_property”访问“a_property”,B应该扩展a。

class b extends a

否则,您只需要创建一个合成,并且合成不会导致访问这两个类的成员。

错误讯息是什么?

答案 2 :(得分:0)

我认为您应该在PHP中阅读inheritance:)

修改

示例代码:

class a{
        public $a_property = 'something something';

}
class b extends a{
        public function test()
        {
            echo $this->a_property;
        }          
}

    $b = new b();
    $b->test();