interfaceとextendsについて1

公開日: : 最終更新日:2019/12/01 php

interfaceとextendsって似ているけど、この2つはの違いは一体なんぞや
と思ったので、何回かに分けて調べていきます。

まずは、そもそも、interfaceとextendsにはどんな機能があるのかについて
見ていきます

interface

<?php
interface Hoge{
  public function piyo();
}
class Hogehoge implements Hoge{
  public function piyopiyo(){
    echo 'piyo';
  }
}
$hogehoge = new Hogehoge();
$hogehoge->piyopiyo();

エラー

implementsには親クラスに実装していない関数を実装できない

<?php
interface Hoge{
   public function piyo();
}

class Hogehoge implements Hoge{
   public function piyo(){
      echo 'piyo';
   }
}

$hogehoge = new Hogehoge();
$hogehoge->piyo();
piyo
親と同じメソッドが実装されているため動く

extends

<?php
abstract class Hoge{
	abstract public function piyo();
}

class Hogehoge extends Hoge{
	public function piyopiyo(){
		echo 'piyo';
	}
}

$hogehoge = new Hogehoge();
$hogehoge->piyopiyo();

エラー

<?php
abstract class Hoge{
	abstract public function piyopiyo();
}

class Hogehoge extends Hoge{
	public function piyopiyo(){
		echo 'piyo';
	}
}

$hogehoge = new Hogehoge();
$hogehoge->piyopiyo();
piyo

implements同様、親クラスに無い関数は動かないようです

interfaceとextends、双方とも
親クラスに実装した機能を子クラスに実装を強制させることができるようです。

これは、親クラスに実装必須の関数をあらかじめ置いておくことで
子クラスの実装漏れを防ぐような使い方ができます。

関連記事

記事はありませんでした

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

PAGE TOP ↑