Phpのinterfaceを使う

>100 Views

March 09, 15

スライド概要

RW社内勉強会用

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

INTERFACEで オブジェクトクラスの 動作を保証する 2015/03 RW社内勉強会用 岡本秀高

2.

できること Interfaceを使うと、 クラスの中身を保障することが 可能になる

3.

INTERFACEとは?

4.

INTERFACEとは? 抽象メソッドを定義するクラスの様なもの。 抽象メソッドのみなので、 メソッドの中身を定義することはできない。

5.

例えばこんな感じ interface alerm{ public function start(); public function alert(); public function stop(); } class AlermClock implements alerm{ public function start(){echo 'start!';} public function alert(){echo 'alerm!';} public function stop() {echo 'stop';} }

6.

使用時のポイント interface alerm{ public function start(); public function alert(); public function stop(); } class AlermClock implements alerm{ public function start(){echo 'start!';} public function alert(){echo 'alerm!';} public function stop() {echo 'stop';} } Interfaceで定義して、 Implementsで実装させる。

7.

便利な「定義済みINTARFACE」 PHPにデフォルトで定義されているInterfaceを使うと、 オブジェクトを配列っぽく扱うような 通常あり得ない動きをするクラスを作れる。

8.
[beta]
オブジェクト内の配列を数える
class ArrayLike{
protected $_arr;

public function __construct($arr = array())

{

$this->_arr = $arr;
}

}
$arrObj = new ArrayLike(array('foo', 'bar', 'baz'));
echo count($arrObj), PHP_EOL; //本来なら3なのに1になる

9.
[beta]
INTERFACEを使って数える
class ArrayLike implements Countable{
protected $_arr;

public function __construct($arr = array())

{ $this->_arr = $arr; }

public function count()

{ return count($this->_arr); }

}
$arrObj = new ArrayLike(array('foo', 'bar', 'baz'));
echo count($arrObj), PHP_EOL; //→3が表示される

10.
[beta]
CLASSの中身を変えただけ
class ArrayLike implements Countable{
protected $_arr;

public function __construct($arr = array())

{ $this->_arr = $arr; }

public function count()

{ return count($this->_arr); }

}
$arrObj = new ArrayLike(array('foo', 'bar', 'baz'));
echo count($arrObj), PHP_EOL; //→3が表示される

11.
[beta]
こんなこともできる
$arrObj = new ArrayLike (array('foo', 'bar', 'baz'));
foreach ($arrObj as $key => $value) {

echo $key . $value . ’ , ’ ; //

→0foo , 1bar , 2baz ,

}

*定義済みInterfaceの「Iterator」を使用すると、
オブジェクトなのにforeachで中身が取り出せた。

12.

さらにはこんなことも $arrObj = new ArrayLike (array('foo', 'bar', 'baz')); $arrObj[1] = ‘直接追加'; echo $arrObj[1]; // =>直接追加 *普通なら「Fatal error: Cannot use object of type ArrayLike as array 」 *定義済みInterfaceの「ArrayAccess」を使用すると、 オブジェクトなのに直接配列を操作できる。

13.

ちなみに 「ArrayObject」という オブジェクトを配列として動かすクラスが デフォルトで存在する。 PHP: ArrayObject - Manual : http://php.net/ArrayObject

14.

INTERFACEを使うメリット ・そのクラスにあるメソッドが一発でわかる ・タイプヒンティングにも使える ・定義済みInterfaceでクラスをいじり倒せる

15.

TRY IT! ・PHPのオブジェクト指向入門 | オブジェクト指向PHP.NET : http://www.objective-php.net/basic/interface ・PHPのinterfaceとは何か - 泥のように : http://blog.tojiru.net/article/377526320.html ・5 分で分かる PHP の組込みインターフェイス - Born Too Late : http://blog.yuyat.jp/archives/992