PHPにおけるOOP継承時のコンストラクタ
継承を行う際、親のコンストラクタをオーバーライドすることができます。 例を見てみましょう。次のような親クラスがあるとします:
<?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
class Student extends User {
}
?>
子クラスでコンストラクタを拡張し、 追加のパラメータを加えたいとしましょう:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
}
}
?>
この場合、最初の行でparent::__construct()を使って
親のコンストラクタを呼び出さなければなりません:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
コマンドparent::__construct()は、本質的に親のコンストラクタです。
したがって、必要なパラメータを渡します:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
次に、子クラスで学習年度を子クラス自身のプロパティに記録します:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
$this->year = $year;
}
}
?>
学習年度のゲッターを作成します:
<?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;
}
}
?>
Employeeクラスが、このレッスンの
Userクラスを継承しているとします。
Employeeクラスで親のコンストラクタをオーバーライドし、
年齢と給与のパラメータを追加してください。
年齢と給与のゲッターを作成してください。