implementsってなんぞや?extendsしか知らんぞ?ってなったので調べてみました。
TL;DR
- implementsはインターフェイスを使いたい時の演算子
- extendsはオブジェクトを継承したい時の演算子
implements
implementsはインターフェイスを使いたい時の演算子です。
インターフェイスとは?
クラスが実装する必要があるメソッドを指定するコード
そのクラスに実装しないといけないメソッドをまとめた、パッケージみたいなものです。
複数のファイル(クラス)を作成する際に、決まったメソッドを実装してほしい時に使えます。
例)
▼インターフェイス
<?php
interface Template
{
public function setVariable($name, $var);
public function getHtml($template);
}
▼インターフェイスに則ったクラス
インターフェイスで定義している setVariable
と getHtml
を実装している。
<?php
class Hoge implements Template
{
public function setVariable($name, $var)
{
// メソッドの中身
}
public function getHtml($template)
{
// メソッドの中身
}
}
▼動かないクラス
インターフェイスを使っているのに、インターフェイスで定義しているメソッドを全て実装していない。
<?php
class Fuga implements Template
{
public function setVariable($name, $var)
{
// メソッドの中身
}
}
extends
オブジェクトを継承したい時の演算子です。
継承とは?
- extendsしたオブジェクトで定義しているメソッドを使える
- extendsしたオブジェクトで定義しているメソッドの中身を上書きして使える
例)
▼継承元のオブジェクト
<?php
class Foo
{
public function printItem($string)
{
echo 'Foo: ' . $string . PHP_EOL;
}
}
▼継承したメソッドをそのまま使う場合
<?php
class Bar extends Foo
{
public function printItems($arr)
{
foreach ($arr as $item)
{
echo printItem($item);
}
}
}
<?php
$bar = new Bar();
$arr = ["hoge", "fuga"];
$bar->printItems($arr);
結果
'Foo: hoge'
'Foo: fuga'
▼継承したメソッドを上書きする場合
<?php
class Bar extends Foo
{
public function printItem($string)
{
echo 'Bar: ' . $string . PHP_EOL;
}
}
<?php
$bar = new Bar();
$bar->printItem("hoge");
結果
'Bar: hoge'