【PHP】クラスを継承した際にデータ型も継承すると
とある有料のオンライン学習サイトをつかっています。
学習項目の流れは以下の通りです。
現在「15 型の継承について見ていこう」で躓いています。
01 オブジェクトを使ってみよう (02:56)
02 投稿に関する処理を作ろう
03 クラスでデータ型を定義しよう
04 インスタンスを作ってみよう
05 コンストラクタを使ってみよう
06 クラスを整理しておこう
07 アクセス修飾子について見ていこう
08 メソッドを介してプロパティを操作しよう
09 プロパティで型宣言をしてみよう
10 staticキーワードを使ってみよう
11 オブジェクト定数を使ってみよう
12 クラスを継承してみよう
13 子クラスで独自の実装をしていこう
14 メソッドをoverrideしてみよう
15 型の継承について見ていこう
*型の継承
*型を継承するメリット
この項目で記述されているソースコードは下記のとおりです。コード内のクラス、SponsoredPostは
クラスPostを継承しています。よって両方のクラスともにPost型として扱えると説明があります。
ソース内のこの箇所で processPostという関数を作成し、変数$postにPost型と型付けをしています
そしてforeachでPostで型付けられた$post型(クラスPostとそれを継承したクラスSponsoredPost)をひとつづつ取り出し、processPostを用いてそれぞれにshow()メソッドで表示させています。
-----------------------
<?php
class Post{
protected $text;
public function __construct($text){
$this->text = $text;
}
public function show(){
printf('%s',$this->text);
}
class SponsoredPost extends Post{
private $sponsor;
public function __construct($text, $sponsor){
parent::__construct($text);
$this->sponsor = $sponsor;
}
public function show(){
printf('%s by %s', $this->text, $this->sponsor);
}
}
$posts = [];
$posts[0] = new Post('hello');
$posts[1] = new Post('hello again');
$posts[2] = new SponsoredPost('iPhone','Apple');
function processPost(Post $post){
$post->show();
}
foreach($posts as $post){
processPost($post);
-------------
クラスを継承すると親クラスのプロパティやメソッドが子クラスに継承されるというのは理解できています。「15 型の継承について見ていこう」という項目では
『Post型の変数を受け取る関数を作って、データ型が継承されることを説明していきます。』
と解説してあります。
クラスを継承すると親クラスのプロパティやメソッドが子クラスに継承されるというのは理解できています。私の知っているデータ型(文字列型、整数型、浮動小数点数型、論理型、配列型、オブジェクト型、リソース型、NULL)は下記の2か所だけです。
show()メソッド内の、['%s']と['%s by %s']で文字列が指定されています。
したがってこの項目で説明されている
『Post型の変数を受け取る関数を作って、データ型が継承されることを説明していきます。』
とは、「クラスを継承する際にプロパティやメソッドだけでなく、データ型、ここでは(['%s']と['%s by %s'])も継承されるということが説明されているという解釈でよろしいのでしょうか?
少し混乱しています。もし私の解釈が間違っているようでしたら教えてください。
初学者です。よろしくお願いいたします。
<表示結果>