タグ

ブックマーク / blog.tojiru.net (8)

  • switch文を使ってはいけない

    昔Qiitaで書いた内容なんですが、PHPswitch文は悪名高い「==」演算子で比較を行います。 <?php switch (true) { case 0: echo '数字の0'; break; case '0': echo '文字列の0'; break; case '0.0': echo '文字列の0.0'; break; case true: echo '真偽値のtrue'; break; } このコードは「文字列の0.0」を出力します。大変分かりにくいですね。 この点はif ... elseif ...を使えば解決するんですが、switchで書きたくなるようなコードをelseifにするとおそらく読みにくくなるでしょう。 ではどうするか。 正解はオブジェクトのポリモーフィズム(多態性)機能を使うことです。 といっても、多態性で調べて出てくる記事とか書籍に関しては抽象的な説明が多い

    switch文を使ってはいけない
    brtRiver
    brtRiver 2014/08/14
  • PHPのstream_socket_serverでテスト用HTTPサーバーを作る

    これで何人目か知りませんが、PHP用のライセンスクリーンなオブジェクト指向ベースcURLライブラリが欲しくて車輪の再発明をしました。(結構昔に作ったんですが、書き溜めたスクリプト集を整理しようと思って名前を変えていっています) spindle/httpclient - Packagist spindle/spindle-httpclient - GitHub HTTPのクライアントライブラリなので、ユニットテストするにはHTTP Serverを用意して、実際にリクエストを投げる必要があります。phpunitコマンドを実行すると、その場で適当なテスト用HTTPサーバーを立てて、そこへ向かってテストを実行して、終わったらHTTPサーバーを破棄する。そんな感じにしたいと思いました。 curl_multiによる多重リクエストも試したかったので、PHP5.4以降に組み込まれているビルトインウェブサー

    PHPのstream_socket_serverでテスト用HTTPサーバーを作る
    brtRiver
    brtRiver 2014/07/23
  • PHPのinterfaceとは何か

    久しぶりの更新です。最近、修行だと思って色々なを読み漁っているのですが、やっとこさPHPのinterfaceが分かるようになってきた感じがあるので、まとめてみます。 インターフェースは、クラスから"ユーザー定義型"の能力のみを分離した言語機構です。PHPのそれはJavaのinterfaceのパクリです。 "ユーザー定義型"という単語を使いました。動的型付き言語のことを「型のない言語」と言う人がたまにいるんですが、とんでもねー間違いです。PHPにだって型はあります。変数が型を持たず、値が型を持っているというだけの話です。 interfaceを宣言する文法はクラスとよく似ていますが、キーワードclassの代わりにキーワードinterfaceを使います。中身は定義のないメソッドの宣言を書きます。なお、定数も含めることが可能です。 <?php interface FooInterface { c

    PHPのinterfaceとは何か
    brtRiver
    brtRiver 2013/10/15
    マーカーインターフェース。なるほど。 http://www.hyuki.com/dp/dpinfo.html#MarkerInterface
  • PSR-3 Logger Interfaceの話

    PSR-3自体の内容と言うよりは、ロガーは重要だとかロガーのインターフェースが標準化されることによってどんなうれしいことがあるかとか、主にその辺をまとめています。 今のところPSR-3対応のライブラリは数えるほどしかなく、PHP-FIGの理想は達成できるのかどうか、、というところですが、日語圏で紹介している人が皆無という印象だったのであえて題材に選びました。 会場提供をしてくださったEngine Yardさんありがとうございます。

    PSR-3 Logger Interfaceの話
    brtRiver
    brtRiver 2013/04/23
  • 規模別PHPUnitでのテストの書き方いろいろ - Architect Note

    最近になってPHPUnitをちゃんと使ってユニットテストを書くようになってきたのですが、まだまだTipsが足りないと感じます。個人的に実践している書き方をいくつか並べてみます。 追記:最初、シェバングと書いていましたが、オプションを渡せる数が決まっていたりOSによっては動かなかったりとあまり便利でないことがわかりました。。phpunit.xmlを書いた方がいいかも。 ちょっとしたテスト → シェルスクリプト化する PHPUnitは高機能なのですが、いかんせん最初の障壁が高いと思います。とにかく気軽に書きたいなら、シェルスクリプトを作って単独ファイルで実行できるようにするといいです。 #!/bin/sh phpunit --colors *Test.php # ↑オプションを書き並べておく <?php class SampleTest extends PHPUnit_Framework_Te

    規模別PHPUnitでのテストの書き方いろいろ - Architect Note
    brtRiver
    brtRiver 2013/02/27
    自分の環境は shファイルではなく Makefile で make test するようにしてる
  • それでもPHPにfinallyが必要な理由

    PHP Conference 2012で知ったのですが、PHP5.5にはfinallyが搭載される見込みだそうです。 搭載されるのはいいのですが、昔、「PHPにfinallyはないけどデストラクタがあるよ」と題してfinally不要説を書いたことがあるので、もう少し考察を行ってみたいと思います。自分で自分に反論を書いてるのもアレなんですけど。 ※RFCは追いかけてなかったので、記事は想像で書いています。ツッコミください。 finally不要説 私が主張した内容を要約するとこんな感じです。 finallyの主な用途はファイルのクローズやDBの接続断などの「後始末処理」である。 後始末はデストラクタで行うこともできる。 PHPではデストラクタの動作が保障されている。(参照カウントによるGC) ゆえにデストラクタを正しく使えばfinallyは不要。 具体例を出すと、finallyのRFCでは例

    それでもPHPにfinallyが必要な理由
    brtRiver
    brtRiver 2012/09/29
    なるほど。。
  • PSR-0はなぜ0(≒最重要)なのか

    Symfony勉強会で酔った勢いでPSRのステマをLT枠でしてきたのですが、参加者の半数以上がPSRを知っているというSymfony勉強会のレベルの高さに完全にやる気を失い、気のない話しかできなかったことをまずはお詫び申し上げます。 アレだとちょっと何が言いたかったのか意味不明ですので、改めて解説したいと思います。スライドはもう上げなくていいか。。 PSRとは PSRとはPHP-FIGっていう、色々なフレームワーク原作者同士の集まりみたいなところで策定されている「コーディング規約」です。標準だの何だの書いてありますが、要はコーディング規約ですよ。 ずっと公式サイトが無くてググラビリティが低いなクソッと思っていたら、いつの間にか公式サイトができていたようです。これで安心して「PSR公式サイトはここだよ!」と案内できますね PHP-FIG レベル分けがあって、今はPSR-0, PSR-1, P

    PSR-0はなぜ0(≒最重要)なのか
    brtRiver
    brtRiver 2012/07/02
    PSR-100もそう遠くない...
  • PHP5.4時代のprivateメソッドテスト手法 #php5_4

    PHP5.4 Advent Calendar 2011の7日目です。昨日は@madapajaさんの「PHP5.4+ で開発が行われている BEAR.Sunday フレームワークを動かしてみる」でした。 さてさて皆さん、ユニットテストしてますか? PHPもテストのライブラリが充実してきており、カバレッジ100%に情熱を燃やしている方も多いことでしょう。 ユニットテストで困るのが、private/protectedメソッドです。外から呼べないので、普通の方法ではテストできません。(protectedは適当なダミーのサブクラスを作ってそこからテストできますが、ちょっと面倒です。) まあ当然です。外から呼べないようにprivateにしているので、簡単に呼べたら逆に困るわけです。しかしながら、privateメソッドも外から呼んでテストできた方が開発ははかどるでしょう。この記事ではPHPでprivat

    PHP5.4時代のprivateメソッドテスト手法 #php5_4
    brtRiver
    brtRiver 2012/01/07
    PHP5.3でも方法があるのね。
  • 1