運行此腳本時,我收到了一些奇怪的反應。奇怪的PHP反應
<?php
error_reporting(E_ALL);
class A {
protected $varOne = array(
"subVar1" => "",
"subVar2" => "",
"subVar3" => "",
"subVar4" => "",
);
public function init() {
$b = new B();
$b->funTest();
echo("One Two Three");
echo("<br />");
print_r($this->varOne);
echo("<br />");
}
protected function setValue($key, $value) {
$this->varOne[$key] = $value;
}
}
class B extends A {
public function funTest() {
$this->setValue("subVar1", "21");
$this->setValue("subVar2", "22");
$this->setValue("subVar3", "23");
$this->setValue("subVar4", "24");
echo("Four Five Six");
echo("<br />");
print_r($this->varOne);
echo("<br />");
}
}
$a = new A();
$a->init();
現在這裏輸出麻煩了我。
OUTPUT:
Four Five Six // As Expected
Array ([subVar1] => 21 [subVar2] => 22 [subVar3] => 23 [subVar4] => 24) // As Expected
One Two Three // As Expected
Array ([subVar1] => [subVar2] => [subVar3] => [subVar4] =>) // Wait, WTF?
爲什麼變量在從A類調用時是空的?
而且能見度設置爲私有時,從B類調用時變量爲空/空
編輯:
這接縫給我我需要的結果,感謝所有爲幫幫我。
<?php
error_reporting(E_ALL);
class A {
protected $varOne = array(
"subVar1" => "",
"subVar2" => "",
"subVar3" => "",
"subVar4" => "",
);
public function init() {
echo("One Two Three");
echo("<br />");
print_r($this->varOne);
echo("<br />");
$b = new B();
$this->varOne = $b->funTest();
echo("One Two Three");
echo("<br />");
print_r($this->varOne);
echo("<br />");
}
protected function setValue($key, $value) {
$this->varOne[$key] = $value;
}
}
class B extends A {
public function funTest() {
$this->setValue("subVar1", "21");
$this->setValue("subVar2", "22");
$this->setValue("subVar3", "23");
$this->setValue("subVar4", "24");
return($this->varOne);
}
}
$a = new A();
$a->init();
你在'A'的子類中定義'fun_test'。 'A'不能從它的子類'B'繼承這個方法。 – Mike
@Mike,A類不需要從B類繼承funTest方法。 – Alex
這並不是說它需要'繼承'方法,而是'A'類沒有'fun_test'的定義。 「B」類具有對「A」類中的所有字段和方法的瞭解和訪問,但「A」類不能訪問類「B」中的方法或字段。當你在'B'中調用'fun_test'時,你只會影響'B'的值。 'A'的值保持爲NULL。 – Mike