метод родительского класса возвращает null в дочернем __construct()

#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. @Доктор профессор, проверьте этот ответ.