我无法控制这个概念。我想在扩展类中使用我父类中的一个简单变量。这个变量很灵活,可以在父类中的Method中的某处计算。
class Class1 {
public $owner;
function set_owner () {
$this->owner = "Me";
return $this->owner;
}
}
class Class2 extends Class1 {
function show_owner () {
return $this->owner;
}
}
$Class1 = new Class1();
$Class2 = new Class2();
echo "<p>owner set: ".$Class1->set_owner()."</p>";
echo "<p>owner get: ".$Class2->show_owner()."</p>";
答案 0 :(得分:2)
您必须使用static
,如此:
class Class1 {
public static $owner;
function set_owner () {
self::$owner = "Me";
return self::$owner;
}
}
class Class2 extends Class1 {
function show_owner () {
return self::$owner;
}
}
$Class1 = new Class1();
$Class2 = new Class2();
echo "<p>owner set: ".$Class1->set_owner()."</p>";
echo "<p>owner get: ".$Class2->show_owner()."</p>";
输出:
owner set: Me
owner get: Me
答案 1 :(得分:1)
你有两个不同的对象。
您可以使用相同的对象:
$Class2 = new Class2();
echo "<p>owner set: ".$Class2->set_owner()."</p>";
echo "<p>owner get: ".$Class2->show_owner()."</p>";
或者如果你想拥有2个对象,你也可以使用静态属性(但这是不好的做法,很难测试)。
答案 2 :(得分:1)
$Class1
是一个不同的对象&amp; $Class2
是不同的对象,因此$owner
变量对于它们都是不同的
你在做什么
echo "<p>owner set: ".$Class1->set_owner()."</p>"; //set the owner variable of Class1
echo "<p>owner get: ".$Class2->show_owner()."</p>"; // get the owner variable of Class2 , $owner is different for Class2
这将打印您想要的内容
echo "<p>owner set: ".$Class2->set_owner()."</p>"; //set the owner variable of Class2
echo "<p>owner get: ".$Class2->show_owner()."</p>"; // get the owner variable of Class2
答案 3 :(得分:1)
记住Class!= object。 Class2继承了Class1的形式,但class1对象为变量设置了一个值,而class2对象并没有从class1对象继承。但您可以将$ owner属性设置为static以实现此目的。
答案 4 :(得分:0)
你的问题不明确。我会尽力而为!
当您扩展父类(Class1)
时,public
和protected
properties
和methods
可由{{1}使用或覆盖} class。
owner变量是可见的,可以由子类使用。但由于此声明,它位于不同的child
:namespace
;
调用$Class2 = new Class2()
会显示echo var_dump($Class2->show_owner());
数据类型。