我有两个类,称为A类和B类。我创建了"A"类。在此,我创建了一个"B"类。如何从"B"类访问"A"类变量?
class A
{
var letter;
var writers;
function __construct()
{
$this-letter = 'SOMETHING';
$this->writers = new B;
}
}
class B extends Writers
{
function __construct()
{
parent::__construct();
echo $letter; //This is where i want to acces outside variable (CLASS 'A')
}
}
我希望我说清楚。我只是OOP-ing的菜鸟。请帮助我。
你不能
,因为 A 中的$letter
没有声明为公共的,B 不会扩展 A。
如果你不想公开 A 的数据(重要的 OOP 原则之一),你应该使用封装。在 A 类中创建 getter
public function getLetter()
{
return $this->letter;
}
然后在 B 的构造方法中,创建一个 A 的实例并使用所述 getter
$a = new A();
$letter = $a->getLetter();
如果你真的需要使用这个结构,我想你可以做这样的事情:
class A
{
var letter;
var writers;
function __construct()
{
$this-letter = 'SOMETHING';
$this->writers = new B($this);
}
}
class B extends Writers
{
var $a;
function __construct(A $a)
{
parent::__construct();
$this->a = $a;
echo $this->a->letter;
}
}
这样,B
将保存对创建它的A
对象的引用。但是,如果可能的话,我建议您更改类拓扑。
你的 B 类需要以某种方式引用 A 对象。您可以简单地添加到 B :
class B extends Writers
{
private $a;
function __construct()
{
parent::__construct();
echo $letter; //This is where i want to acces outside variable (CLASS 'A')
}
public function A($a)
{
$this->a = $a;
}
}
接下来,只需让您的 A 对象为其 B 对象提供对自身的引用。
class A
{
var letter;
var writers;
function __construct()
{
$this-letter = 'SOMETHING';
$this->writers = new B;
$this->writers->A($this);
}
}
另一种方法是静态方法。
很难确切地说出你想要什么,但正如我所解释的那样:
class A extends Writers
{
var letter;
var writers;
function __construct()
{
$this-letter = 'SOMETHING';
$this->writers = new B;
}
}
class B extends A
{
function __construct()
{
parent::__construct();
echo $this->letter; //This is where i want to acces outside variable (CLASS 'A')
}
}
您可以使用静态变量。 像这样:
class A
{
static $letter;
function __construct()
{
self::$letter = 'SOMETHING';
}
}
$objA = new A();
class B
{
function __construct()
{
$letter = A::$letter;
echo $letter; //print SOMETHING
}
}