Я получаю некоторые странные реакции при запуске этого скрипта.Странная реакция 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?
Также при установке видимости частного, переменная NULL/EMPTY, когда вызывается из класса В.
EDIT:
Это швы дает мне нужный результат, спасибо всем за Помогите.
<?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();
Вы определили 'fun_test' в подклассе' Ā'. 'A' не может наследовать метод из своего подкласса' B'. – Mike
@Mike, класс A, однако, не нужно наследовать метод funTest из класса B. – Alex
Это не значит, что он должен «наследовать» метод, но класс 'A' не имеет определения для' fun_test'. Класс 'B' имеет знания и доступ ко всем полям и методам из класса' A', но класс 'A' не имеет доступа к методам или полям из класса' B'. Когда вы вызываете 'fun_test' в' B', вы произносите только значения 'B'. Значения 'A' остаются' NULL'. – Mike