ブックマーク / qiita.com/Hiraku (4)

  • PHPで列挙型(enum)を作る - Qiita

    列挙型 - Wikipedia まず列挙型の定義は〜となるんだけど、ここでは「あらかじめ定義した値のいずれかしか取らない特殊な型」という感じを想定してます。 要はSplEnumみたいなのですが、拡張モジュールの力を借りなくても、PHPだけで作れます。リフレクションを使うだけ。 <?php abstract class Enum { private $scalar; public function __construct($value) { $ref = new ReflectionObject($this); $consts = $ref->getConstants(); if (! in_array($value, $consts, true)) { throw new InvalidArgumentException; } $this->scalar = $value; } final

    PHPで列挙型(enum)を作る - Qiita
    trashtoy
    trashtoy 2016/11/04
    親クラスでリフレクション
  • 文字列の先頭マッチ・末尾マッチはどうするのが最速か - Qiita

    任意の文字列が与えられた時、先頭が"abc"であることを判定したい。 いろいろ書き方があると思うが、どう書くのが良いのか。 「文字列が含まれているか」を判定するときはstrposを使うのが最速だと知られている。 strposは最初にneedleが現れた位置を数字で返し、見つからなければfalseを返す。 if (false !== strpos($haystack, $needle)) { echo "$needle が $haystack の中に含まれています"; }

    文字列の先頭マッチ・末尾マッチはどうするのが最速か - Qiita
    trashtoy
    trashtoy 2016/05/23
    だいたい想像通りの結果だった
  • コードをまとめる技術としてのイテレータとジェネレータ - Qiita

    ジェネレータが5.5から入ったことで完全に空気と化した(?)PHPのイテレータを、ちょっと違う面からまとめたいと思います。 コードをまとめるということ Don't Repeat Yourself(DRY)という言葉があります。達人プログラマーというに出てくる言葉です。 信頼性の高いソフトウェアを開発して、開発そのものを簡単に理解したりメンテナンスできるようにする唯一の方法は、DRY原則に従うことです。 「すべての知識はシステム内において、単一、かつ明確な、そして信頼できる表現になっていなければならない。」 (p. 27) 端的に言えば「同じことを二度書いてはいけない」ということですね。この原則を当てはめなくてもいい例外のパターンもいくつかあるのですが。。 コードにおいて「同じことを二度書いてはいけない」を忠実に守ろうとすると、同じコードを何度も書きたくなったら、何らかの方法でそのコードを

    コードをまとめる技術としてのイテレータとジェネレータ - Qiita
  • Iteratorをimplementsする奴は情弱。IteratorAggregateを使え - Qiita

    という話をずいぶん前にFabienさんがしていたのをふと思い出したので、たまには啓蒙っぽい記事を書いてみる。 Iterator or IteratorAggregate? - Fabien Potencier foreach可能なオブジェクトを作る PHPのオブジェクトは特に何もしなくてもforeachでぐるぐる回して中身を得ることができます。 ただし、得られるものはpublicメンバに限ります。 <?php class A { public $hoge = 1; public $fuga = 2; private $pri = 3; protected $pro = 4; } $a = new A; foreach ($a as $key => $val) { var_dump($key, $val); } ただ、カプセル化を真面目に行っている皆様方におかれましては、publicなんて使

    Iteratorをimplementsする奴は情弱。IteratorAggregateを使え - Qiita
    trashtoy
    trashtoy 2014/06/13
  • 1