为什么以下代码返回NULL?我试图让父方法返回父类内的属性值,但由于某种原因,它返回null。
class A {
public $greeting;
public function __construct($message){
$this->greeting = $message;
}
public function getGreeting(){
print 1;
return $this->greeting;
}
}
class B extends A{
public function __construct(){
}
public function getGreetingMessage(){
parent::getGreeting();
}
}
$classA = new A('Hello world');
$classB = new B();
var_dump($classB->getGreetingMessage());
在父方法中,“1”正在打印,因此我知道正在调用该方法
答案 0 :(得分:2)
因为问候留言未在班级b中设定。所以问候消息返回null。
答案 1 :(得分:1)
1)return parent::getGreeting();
2)$classA
和$classB
是不同的实例。无法在$classA
$classB
中设置的内容
3)父节点的构造函数不是从classB
调用的,而且,在上面classB
的初始化中没有提供任何参数(见2)
class A {
public $greeting;
public function __construct($message){
$this->greeting = $message;
}
public function getGreeting(){
print 1;
return $this->greeting;
}
}
class B extends A{
public function __construct($message){
parent::__construct($message);
// or $this->greeting = $message;
}
public function getGreetingMessage(){
return parent::getGreeting();
}
}
$classA = new A('Hello world');
$classB = new B('Hello world 2');
var_dump($classB->getGreetingMessage());
答案 2 :(得分:1)
您必须在子类中调用父级的构造函数,否则父级构造函数不会运行且类未正确初始化:
class B extends A{
public function __construct($message){
parent::__construct($message);
}
所以你很可能想要这个
$classB=new B('Hello World');