我想知道这种组合是否可行。
classA.php
class A
{
public $one = "one";
function start() {
$this->one = "seven";
include "classB.php";
$two = new B;
print_r(get_defined_vars());
}
}
classB.php
class B extends A
{
public $two = "two";
function __construct() {
echo($this->one);
}
}
最后是index.php
include "classA.php";
$A = new A;
$A->start();
当我运行index.php时,我得到以下内容:
Array
(
[one] => seven
[B] => B Object
(
[two] => two
[one] => one
)
)
有没有办法让B级使用更新的变量?或者我必须将代码分成两个文件并单独使用它?这样它起码至少......但我不喜欢我的代码在课外,我尽量减少使用全局范围......
答案 0 :(得分:1)
您不必将班级b包含在班级a。
中只需使用B类扩展A,即所有。
在您的输出中,您创建了一个新的对象B,它扩展了A类,但是这个B对象是一个与父类无关的新实例。
试试这个:
class A {
public $propA = 'Property of A class';
}
class B extends A {
public $propB = 'Property of B class';
}
$obj = new B();
echo $obj->propA; // returns "Property of A class"
echo $obj->propB; // returns "Property of B class"
答案 1 :(得分:0)
您可以使用静力学。这是一种可怕的做法,但是:
class A
{
public static $one = "one";
function start()
{
$one = "seven";
$two = new B;
print_r(get_defined_vars());
}
}
class B extends A
{
public $two = "two";
function __construct() {
echo($this::$one);
}
}
答案 2 :(得分:0)
IMO,php.net文档有点稀缺。这就是为什么我们有Stackoverflow,为此我感激不尽。对于小费来说,我现在意识到了这一点。每天学习新东西。
重点。 index.php中的代码应如下所示:
include "classA.php";
include "classB.php";
$B = new B;
print_r(get_defined_vars());
$B->start();
print_r(get_defined_vars());
现在它完全输出我需要的东西:
[B] => B Object ( [two] => two [one] => one ) // before the change
[B] => B Object ( [two] => two [one] => seven ) // after the change