Php 引用';假家长';谁的财产。。。?

Php 引用';假家长';谁的财产。。。?,php,loading,parent,Php,Loading,Parent,我一直在想以下几点有一段时间了: 我使用的构造是将一些(,在本例中是“工具”-)类加载到“父”或“控制器”类的属性中。更具体的: class a { public $b; public $c; public function __construct() { $this->b = new b(); $this->c = new c(); }

我一直在想以下几点有一段时间了: 我使用的构造是将一些(,在本例中是“工具”-)类加载到“父”或“控制器”类的属性中。更具体的:

    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)之间的关系不是(分别)的“父子关系”,因为a只能有一个实例。不过,到目前为止还不错:目前我正在访问b类或c类中的a类成员,方法是通过调用“全局”获取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:(我再也找不到关于它的任何文档/参考),但是)我相信从PHP5(.?)开始,以下应该是可能的:

    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();
这不管用。。。虽然服务器正在运行PHP5.3.6


奥卡姆剃须刀:我可能误解了它的功能…!;-)

由于
b
不扩展
a
即使
a
实例化了它,它应该能够通过
echo a:$a\u属性访问属性
因为现在
b
作为
a
类的作用域。

我认为如果您想通过使用“$this->a\u属性”访问“a\u属性”,b应该扩展a

class b extends a
否则,您只需创建一个组合,而组合不会允许访问这两个类的成员


错误消息是什么?

我认为您应该阅读PHP:)

编辑:

示例代码:

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

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

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

嗨,AlienWebguy,谢谢你的回复!但是:我从未见过范围解析操作符和对象访问器组合使用……而且它不起作用。。。(变量“$”在哪里?)另外:是的,如果“$a_属性”声明为“static”,那么“a::$a_属性”将起作用。。。这,我宁愿不做…嗨,崔门,谢谢你的回复!是的,这当然有效,但是,正如我所说的,“a”类不应该是“b”和/或“c”类的“家长”。。。错误是(好问题!;-):“未定义的属性:b::$val”告诉我:“b”不知道“a”。。。正确的!?两件事。或者,A应该是B的父级,或者您可以将$A_属性作为静态属性进行访问。“$this”引用类型为“B”而不是“a”的类如果a只能实例化一次,它难道不是具有“singleton”模式的父类吗?嗨,Mateusz,谢谢你的回复!是的,我知道这一点,因此(在发布的示例中)使用了“声明为全局”方法。我的问题是关于我所想的“什么应该是可能的(从第5版开始)”——“因为我在某个地方读到过。”——是真是假……;)