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