PHPにおけるOOP継承時のコンストラクタ

継承を行う際、親のコンストラクタをオーバーライドすることができます。 例を見てみましょう。次のような親クラスがあるとします:

php<?php
  class User {
    private $name;
    private $surn;
    
    public function __construct($name, $surn) {
      $this->name = $name;
      $this->surn = $surn;
    }
    
    public function getName() {
      return $this->name;
    }
    public function getSurn() {
      return $this->surn;
    }
  }
?>

親クラスを以下のクラスが継承しているとします:

php<?php
  class Student extends User {
    
  }
?>

子クラスでコンストラクタを拡張し、 追加のパラメータを加えたいとしましょう:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      
    }
  }
?>

この場合、最初の行でparent::__construct()を使って 親のコンストラクタを呼び出さなければなりません:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
    }
  }
?>

コマンドparent::__construct()は、本質的に親のコンストラクタです。 したがって、必要なパラメータを渡します:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
    }
  }
?>

次に、子クラスで学習年度を子クラス自身のプロパティに記録します:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
      $this->year = $year;
    }
  }
?>

学習年度のゲッターを作成します:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
      $this->year = $year;
    }
    
    public function getYear() {
      return $this->year;
    }
  }
?>
Задание 1

Employeeクラスが、このレッスンの Userクラスを継承しているとします。

Задание 2

Employeeクラスで親のコンストラクタをオーバーライドし、 年齢と給与のパラメータを追加してください。

Задание 3

年齢と給与のゲッターを作成してください。