我有3个班级:
我想使用来自我的Child类的变量来使用C类中的函数。
<?php
class A
{
public function __construct()
{
$this->load();
}
public function load()
{
$class = new C();
$class->test = $this->test;
$this->c = $class;
}
}
class B extends A
{
public function __construct()
{
parent::__construct();
}
}
class C
{
public function display()
{
echo $this->test;
}
}
$b = new B();
$b->test = 1;
$b->c->display();
答案 0 :(得分:1)
你的问题在这里:
$class->test = $this->test;
您正在尝试使用尚未定义的属性,因为当您执行此操作时:
$b->test = 1;
构造函数已被调用,并且您的类中没有任何内容可以使用B的test属性值更新C.
您可以通过几种不同的方式解决此问题。
1)在B的构造函数中发送值,并将其传递给整个链:
class A
{
public function __construct($test)
{
$this->load($test);
}
public function load($test)
{
$class = new C();
$class->test = $test;
$this->c = $class;
}
}
class B extends A
{
public function __construct($test)
{
parent::__construct($test);
}
}
class C
{
public function display()
{
echo $this->test;
}
}
$b = new B(123);
$b->c->display();
2)向B添加一个更新C属性的方法:
<?php
class A
{
public function __construct()
{
$this->load();
}
public function load()
{
$class = new C();
$this->c = $class;
}
}
class B extends A
{
public function __construct()
{
parent::__construct();
}
public function setTest($test)
{
$this->c->test = $test;
}
}
class C
{
public function display()
{
echo $this->test;
}
}
$b = new B();
$b->setTest(123);
$b->c->display();
或者两者兼而有之。