【PHP】抽象クラスとインターフェイスの違いについての問題(PHP上級者向け)

php

下記のソースコードは動作するか、またしない場合は、どうすれば動くのか。

問題2題

問題1

<?php

interface Reader{
public function read();
}

interface Writer{
public function write();
}

class Config implements Reader,Writer{
public function read() {
echo "read";
}
}

$a = new Config();
$a->read();

問題2

<?php

abstract class ReaderWriter{
abstract public function read();
function write(){
echo "write";
}
}

class Rw extends ReaderWriter{
public function read() {
echo "read";
}
}

$a = new Rw();
$a->read();

問題1の答え
動かない

<?php

interface Reader{
public function read();
}

interface Writer{
public function write();
}

class Config implements Reader,Writer{
public function read() {
echo "read";
}
public function write() {
echo "write";
}
}

$a = new Config();
$a->read();

というように、writeメソッドを追加してあげると動く。interfaceで定義したメソッドを全て定義しなければならない。

問題2の答え
動く

問題1の時と違って、全て親クラスのメソッドを記述しなくても、問題ない。

抽象クラスとインターフェイスのおさらい。

 

抽象クラスは、共通の機能を抽象的な親クラスで定義し、特有の機能は個々の小クラスでそれぞれ実装させたい場合に定義します

 

インターフェイスは機能の実装を規格するための仕組みです。
オブジェクト指向のプログラミング手法においてよく用いられます。

インターフェイスとは、複数の異なるクラスに共通の実装するために、その実体を定義することなく指定する仕組みです。

パーフェクトPHPを引用

コメント

タイトルとURLをコピーしました