読者です 読者をやめる 読者になる 読者になる

はむはむエンジニアぶろぐ

このブログのコンセプトは"ハッキングの為なら愛する家族を傷つけることをいとわない" 自分にとってエンジニアリングは "手段ではなく生きる目的" である

PHP BLT #5に参加してきた

PHP BLT #5 に参加してきたのでslideをまとめておく。 次回は、なにか話したいな〜

Comporserのバージョン指定にdev-masterしてるけど大丈夫なの?

Comporserでライブラリをインストールをする際にバージョンを指定できます。 というより、今後も安定して使いたいのであればバージョンを指定してインストールしたほうが良いと思います。 なんでもかんでも、最新版がいいと思い込んでいる人はバージョン指定…

PHP BLT #2でLTしてきました & LT資料まとめ

PHP BLT #2というイベントに参加し、LTしてきました。 無料で会場をお貸しいただいた株式会社メルカリ様ありがとうございました。 第一回のPHP BLTに参加したかったけど、抽選に落ちたので第二回である今回に参加できて良かったです。

親クラスのフィールドへのアクセス場合は、getter/setterを使ったほうがいいと思う

他の言語は知らないけど、PHPではvisibilityが public 又は protected で宣言された親クラスのフィールドに $this でアクセスできてしまう。 public でフィールドを宣言することは、カプセル化を壊すことになるのでやらないと思うけど。 親クラスのフィール…

JavaScriptを動的に組み合わせるべきではない

例えば、このようにPHPをJavaScriptで、動的に組み立てられているコードには問題点が2つある。 <script type="text/javascript"> var hoge = '<?php echo $hoge ?>'; </script> セキュリティ面 メンテナンス面 である。

PHPUnitの便利な機能を紹介する

この記事はPHP Advent Calendar 2015 - Qiita 14日目の記事です。 担当は@secret_hamuhamu です。 みなさんは、PHPのテスティングツールに何をお使いでしょうか? Behat?PHPSpec?PHPUnit? 今日は、PHPUnitの便利な機能をいくつか紹介したいと思います。 …

2つの期間で重なる期間が存在するか判定するアルゴリズム

この記事はアルゴリズム Advent Calendar 2015 - Qiita 7日目の記事です。 担当は@secret_hamuhamu です。 私は、理系出身の人間ではなく数学もほとんどできないので、論理的に数学的に説明できていないと思います。 ですが、このような説明の仕方のほうが、…

頻出して使うテスト用のインスタンスの生成に関する話

この記事はオブジェクト指向 Advent Calendar 2015 - Qiita 1日目の記事です。 担当は@secret_hamuhamu です。 今回は、「Object Motherパターン」と「Test Data Builderパターン」についてまとめました。 これら、2つのパターンはテスト時に用いるパターン…

PHPでStrategyパターンを実装してみた

GoFのデザインパターンの一つStrategyパターンをPHPで実装してみた。 Strategyとは「戦略」のことで、戦略とはアルゴリズムのことを指しています。 Strategyパターンは、アルゴリズム(振る舞い)をカプセル化し振る舞いの差替えや追加、削除をしやすくするも…

PHPのMatcherライブラリPHP Matcherを使ってみる

PHP MatcherというPHP用のマッチャーを見つけたので、使ってみた。 PHPUnitなどのテスティングツールと合わせて使うことができる。 マッチャーとは? テストの表現力を高めることができる アサーションの条件をより詳しくかける マッチャーを使うことで、複…

【PHPUnit】少し複雑な条件はassertThatを使う

PHPUnitや他のxUnit系に assertThat という少し複雑な条件を書くことができるアサーションがあります。 PHPUnitで、たまに使う assertThat を紹介してみようかなと思います。

【AOP】ProxyパターンとDIコンテナを使ったアスペクト指向プログラミング

ProxyパターンとDIコンテナを使うことで、アスペクト指向プログラミングを実現できます。 アスペクト指向は、オブジェクト指向で解決しにくい問題を解決しましょうというパラダイムです。 今回のアスペクト指向プログラミングの対象は、ロギングです。 言語…

PHP カンファレンス2015で、LT「PHPでDIする」を発表してきました

2000人を超えて、人たちが集まったPHPカンファレンス2015でLTをしてきました。 めちゃくちゃ楽しかったです!!スピーカーの方々、並びにスタッフの方々お疲れ様でした!! 私は、LT 兼 スッタフという立ち位置でした。 スタッフ参加したので、PHP7 Tシャツ…

PHP カンファレンスのレポートを書かせてもらいました!明日はLTするよ!【PHPカンファレンス2015前日編】

gihyo.jpさんで、PHPカンファレンス 2015のスタッフとしてレポートを書かせて頂きました。 こちらが、書いたレポート 明日開催!PHPカンファレンス2015 直前レポート 明日も、例年通り当日のセッションをレポートします!! 参加者が、現時点で2000名を超え…

【PHP】メソッドチェーンで、記述できる バリデーションクラスChainValidatorを作った

メソッドチェーンで、記述できる記述できる バリデーションクラスChainValidatorを作ってみた。 作ったきっかけ 毎回、バリデーション書くのがめんどくさい 汎用的にバリデーションロジック部分のみ書き換えたい 自分にとって理想なバリデーション機構を目指…

PHPカンファレンス2015で、LTと当日スタッフやらせてもらいます

PHPカンファレンス2015で、LTと当日スタッフやらせてもらいます。 phpcon 2015 まだ、参加できるみたいなので、どうぞどうぞ〜。 ここまで大きいカンファレンスでLTやスタッフさせてもらうの初めてなので、楽しみです〜。 ちなみに、LTは「PHPでDIをする」っ…

マーカーインターフェースを使った例外設計

マーカーインターフェースを使った例外設計をPHPで行います。 マーカーインターフェースは、実装を持たない空っぽのインターフェースです。 こんなやつ。

PHPでValueObjectを実装してみる

ValueObjectは、getterしかないオブジェクトです。 getterしか無いって何が嬉しいの?って感じかもしれませんが、特定の概念を説明する集合体として表現できます。 ようは、コードに概念の集合を語らせることが出来ます。 簡単なパターンなので、覚えること…

PHPのClosureを利用したトランザクション処理

とあるPHPで実装されたOSSのトランザクション処理が、とてもエレガントだったのだがOSSの名前を忘れてしまった。 しょうがないので自分の記憶を頼りに真似してみようと思う。

PHPで例外チェーン

オブジェクト指向プログラミングで、例外処理をする際は 例外チェーン を意識せねばなりません。 例えばこのように、catchの中でさらに例外を投げ直していて(throw)例外チェーンをしていないとどうなるか? method1(); $this->method2(); $this->method3(); …

第93回 PHP勉強会@東京に参加して、LTしてきました + アスペクト指向について

2015年8月25日(火)にGMO Yours様で、開催されたPHP勉強会に参加してきました。 参加して思ったのが、業務で CakePHP を使っている方がとても多かったことですね。 時点は、 Laravel か Fuel PHP って感じでした。 せっかくなんで、LTしてきましたよ〜。 とい…

PHPでDIをする

PHPでDI( Dependency Injection )をします。 DIとは、日本語訳で依存性の注入です。 依存性というのは、クラスから別のクラスを呼び出している状態です。 例えば、犬が鳴いたら猫も鳴く。 meow(); } } Dogクラスのbarksメソッドは、Catクラスに依存していま…

ファットコントローラはFacadeパターンで撲滅しよう

MVCのコントローラのレガシーコードによくあるのが、ファットコントローラです。 最初は、単純なロジックだけだったのでコントローラに書かれていたロジックが月日を追うごとに肥大化して誰も読めなくなったというのはあるあるです。 ファットコントローラの…

インタラクティブにPHPの動作確認が出来るborisをいれてみた

PHP

PHPでちょこっと動作確認したい時、 php -a を使うと思います。 しかし、変数や配列の中身を確認したい時少し不便です。 わざわざ、 echo や var_dump しなければならない。 こんなかんじに。 php > $var = 'hoge'; php > echo $var; hoge php > $ary = arra…

PHPUnit 壊れているテストを徐々に改良していく

PHPUnitで、テストを回した際、コケまくるなんて経験ありませんか? ...FFFFFFみたいに。 実装のリファクタリングを行ったとか、テストがコケたまま放置されていたとか色々あると思います。 TDD的にこれらのテストの修正を一気に行うことは、アンチパターン…

PHP 連結するORのSQL文の組み立てにimplodeを使うとよい

PHP

不特定数のパラメタを受け取って連結するORのSQL文を動的に組み立てるコードを書くことはよくあると思います。 こんなやつ。 SELECT * FROM FRUITS WHERE (NAME = りんご OR NAME = みかん OR NAME = ぶどう) implode関数を使えば、スッキリ書くことが出来ま…

PHPUnitでカバレッジテストをやってみる

タイトルの通り、PHPUnitでカバレッジテストをやってみる。 Xdebugが必要なので、事前にインストールしておいてください。

Makefileとシェルスクリプトを使ってテンプレートからファイルを作成する

例えば、PHPクラスを作成しようとした時に、PHPクラスを cp して、ファイル名変更。 コピーした新しいクラスをエディッタで開き、クラス名を変更。 コピーミスでトラブったりクラス名変更し忘れてテスト通らないとかあるあるだと思います。 Makefileとシェル…

PHP privateメソッドのテストをする

privateメソッドのテストどうするか議論ってテスト書いてる人なら必ずしたことありますよね? 私は、privateメソッドは、実装が隠されているのでprivateメソッドを呼び出しているpublicなメソッドさえテストすればいいと思っています。 privateメソッドの振…

PHPのバージョン管理するphpenvをMacにインストール

PHP

phpenvをMac OS Xにインストールメモ。 PHPをインストールするためには、php-buildが必要なので合わせてメモ。

参照透過性とは何だ?

関数型プログラムでよく聞く言葉である参照透過性。 参照透過とはどういうことなのかPHPで実装してみた。

PHPでメソッドチェーンをやってみた

PHP

最近のPHPのフレームワークは、メソッドチェーンを多用するのが流行りみたいなので流行りに乗ります。 メソッドチェーンをすることで、コードが簡潔になると思うので覚えて損はないはず。