#php #oop
#php #ооп
Вопрос:
Я попробовал код, который я вызвал родительский метод в его дочернем __construct, и он возвращает NULL, я не знаю почему? Я был бы очень рад, если бы кто-нибудь мог объяснить мне, почему. Заранее спасибо.
Вот мой код
<?php
class me
{
public $arm;
public $leg;
public function __construct()
{
$this->arm = 'beautiful';
$this->leg = 'pretty';
}
public function setLeg($l)
{
$this->leg = $l;
}
public function getLeg()
{
return $this->leg;
}
}
class myBio extends me
{
public $bio;
public function __construc()
{
$this->bio = $this->setLeg();
}
public function newLeg()
{
var_dump($this->bio);
}
public function tryLeg()
{
$this->leg = $this->getLeg();
print $this->leg;
}
}
$mB = new myBio();
$mB->newLeg();
$mB->tryLeg();
?>
Когда я вызываю:
$mB = новый myBio();
$mB->newLeg();
, он возвращает NULL,
НО
$mB->tryLeg();
возвращает строку e, ‘pretty’ .
Комментарии:
1.
$this->bio = $this->setLeg();
Опечатка,set != get
2. @scrag: должен быть ответ, поскольку он должен работать с исправленной опечаткой
3. @niconoe Я опубликовал это как комментарий, потому что я даже не читал вопрос, я просто прокручивал и заметил, что параметр используется без аргумента. Насколько я знал в то время, вопрос был совершенно не связан с моим комментарием, и комментарий был случайным.
Ответ №1:
У вас опечатка в этой строке:
$this->bio = $this->setLeg();
Вы вызываете свой установщик, а не получатель, и поскольку установщик не возвращает значение, вместо этого вы получаете значение null.
Вы также неправильно написали construct:
public function __construc()
И вам нужно вызвать родительский конструктор.
<?php
class me
{
public $arm;
public $leg;
public function __construct()
{
$this->arm = 'beautiful';
$this->leg = 'pretty';
}
public function setLeg($l)
{
$this->leg = $l;
}
public function getLeg()
{
return $this->leg;
}
}
class myBio extends me
{
public $bio;
public function __construct()
{
parent::__construct();
$this->bio = $this->getLeg();
}
public function newLeg()
{
var_dump($this->bio);
}
public function tryLeg()
{
$this->leg = $this->getLeg();
print $this->leg;
}
}
$mB = new myBio();
$mB->newLeg();
$mB->tryLeg();
Комментарии:
1. Большое спасибо. но я исправил эту опечатку, но она по-прежнему возвращает NULL
2. @Доктор профессор, проверьте этот ответ.