polidog lab++

Blog
PHPでTraitをより安全に実行するためにassertを使う

PHPでTraitをより安全に実行するためにassertを使う

Dec 21, 2016 | tech | php assert trait

再演@t_wadaさんのPHP7で堅牢なコードを書く - 例外処理、表明プログラミング、契約による設計を聞いて、本当に様々な発見がありました。

その中でもassertの使い方は本当に勉強になりました。(とはいえ、そんなにちゃんとassertの使い所を理解しているわけではありませんが・・・)

「発生した暗黙の前提をassertを使って評価式で書き、明示する」
これってtraitでも使えるんじゃないかなぁーなんて思うんですよね。

Traitは怖い

こんな実装があったとして、本当にcountUp()が実装されているの?って不安になるわけですよ。

<?php

class Counter
{
    private $count = 0;

    public function countUp(): int
    {
        $this->count++;
        return $this->count;
    }
}
<?php

trait OutputTrait
{
    public function output()
    {
        echo 'hello '. $this->countUp();
    }
}

assertを使って不安を取り除く

こんな感じにassertを使って「countUpメソッドが必要ですよ」と前提条件を明示することによって、より安全にTraitが使えるのかと思います。

<?php

trait OutputTrait
{
    public function output()
    {
        assert(method_exists($this,'countUp'));
        echo 'hello '. $this->countUp();
    }
}

最後に

もっと良いやり方があるような気もしますが。
しかし、より安全にTraitを使うためにassertを使うのも良い気がします。

comments powered by Disqus

© 2017 polidog lab++