我一直想知道以下情况: 我正在使用将一些(在这种情况下为“工具” - )类加载到“父”或“控制器”类的属性中的构造。更具体:
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 ...
奥卡姆剃刀:我可能对这个功能错了......! ; - )
答案 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();