ログ日記

作業ログと日記とメモ

interfaceとか使う?

PHPの開発にインターフェースって使うものなのかな?
一般的にはどうだろうと聞けるほど一般論が定まってないか。

class MyClass
{
    private $otherLayer;

    public function __construct(MyLayer $layer){
        $this->otherLayer = $layer;
    }

...


こうすると、$otherLayer変数は private MyLayer $otherLayer と同じ意味で考えることができる。$otherLayerは少なくともMyLayerのインターフェースを持っている。
しかし

スクリプト言語人気に思う,動的型付け言語の可能性 | 日経 xTECH(クロステック)

ここでメリットとして挙げられている動的型付けの楽さは得られない。


こういう作り方をするなら、(言語を自由に選択できる立場であるなら)PHP以外の静的型付け言語を使うのが吉じゃなかろうか。




というのを

class MyClass
{
    private $dao;
    public function __construct(DAO $dao){
        $this->dao = $dao;
    }

のDAOをO/Rマッパーに変更するときに思った。


DAOとO/Rマッパーで、例えばquery()関数がかぶっていてO/RマッパーからDAOのquery()関数を呼び出している場合。
MyClassでは今までDAOで十分だと思って作っていたところ、新たに関数を追加するに当たってDAOをO/Rマッパーに変更しようとする。
__construct(DAO $dao) を __construct(ORMapper $dao) に変更するだけなんだけど、もやもや感が残る。



# もやもやの原因を考えてみた

PHP

interface A implements B

と書けると仮定すると

interface DAO imprements SimpleDbInterface

interface OrMapper imprements SimpleDbInterface

としたかった。でも(もし上のように書けたとして)PHPでそこまでするの?という感じ。


しかも、静的型付け言語ならインターフェースに含まれないメソッドを実行しようとするとコンパイル時に警告を発してくれるだろうけど、PHPではインターフェースを使ったとしてもエラーは実行時だ。
もうちょっと考えてみる必要がありそう。