タグ

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

  • モックライブラリ・Prophecyの使い方まとめ - Qiita

    Prophecyとは phpspec/prophecy PHPUnitと組み合わせて使えるモックライブラリ。 元はphpspecの一部として開発されたもので、phpspecと組み合わせなくても単独で使うことができる。 PHPUnit 4.5からパッケージに同梱されるようになった。PHPUnitの新しいバージョンを使っていれば、composer.jsonに加えなくても使うことができる。 テストダブルとは ユニットテストを書くときに、テスト対象の依存の代替として使うオブジェクトをテストダブルと言う。目的はいくつかある。 依存オブジェクトの準備を手抜きする。100行の準備をしないとテストが書けないとしたらユニットテストが読みにくくなってしまう。 実行しづらいメソッドを差し替える。外部へ通信してしまうもの、I/Oが発生するもの、すごーくたまにしか失敗しないものなどを強制的に変更したいとき。 メソッ

    モックライブラリ・Prophecyの使い方まとめ - Qiita
    k-holy
    k-holy 2018/07/02
    PHPUnit組み込みのモッキングライブラリ。今更Phakeの書き方覚えるくらいなら、こっち覚えた方が良いかな。流行り廃りでテストコード書き直すの大変なので定着してくれると嬉しい。
  • PHP+cURLのエラーハンドリング - Qiita

    エラーハンドリングの基 PHPのlibcurl拡張でHTTPリクエストをする際、色々なエラーが起きることが考えられる。 curl_errnoとcurl_errorで直近のexecで発生したエラーを調べることができる。 curl_exec()の戻り値がfalseだったらエラーだと判定できるのだけど、詳細なところがわからないので、明示的にエラーが起きたかを調べた方がよさそう。 例外を使いたいなら、ラッパークラス/関数でハンドリングして適当なException型を投げればよいだろう。 <?php // 単純なcurl関数のラッパー // 毎回コネクションを切断するので非効率かも function getHttpContent($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $body

    PHP+cURLのエラーハンドリング - Qiita
  • 時刻かつURLごとのアクセス数(ヒストグラム形式)を一気に集計するSQL - Qiita

    これを時刻ごとに区切って、◯時台だと/fooに何回、/baaに何回、アクセスがあったよーみたいなのを計算したい。 どう書きますか? 私の回答 要件によるんだけど、pathのパターンが数種類だけで決まっているなら、すごく簡単な1個のSQLで作れる。 ここではBigQueryの関数を使っているけれど、時刻の関数はどのRDBMSにもついてるだろうし、たぶん似たような発想で作れると思う。 SELECT UTC_USEC_TO_HOUR(created) AS period , SUM(path = '/foo') AS foo , SUM(path = '/baa') AS baa , SUM(path = '/moo') AS moo FROM logs WHERE created BETWEEN '2017-01-01' AND '2017-01-02' GROUP BY period ORD

    時刻かつURLごとのアクセス数(ヒストグラム形式)を一気に集計するSQL - Qiita
    k-holy
    k-holy 2017/01/16
    こういう時はいつもCASE式使ってたけど、SUM()だけでもいけるわけか
  • PHPで定数定義するときはdefine()よりもconstを使うべき - Qiita

    <?php define('HOGE', 'hoge'); const FUGA = 'fuga'; 見て分かる通り、defineは関数であるのに対しconstは関数ではないのでconstの方が高速に処理される。 大量に定数定義したいならconstを使う方が望ましい。 その昔「定数定義を高速に行う」というためだけの関数がいくつか存在していたが、いずれも拡張モジュールのメンテナンスが止まっているようなので、今やるならconst書き換えが現実的なチューニング法なんじゃないかな。 http://php.net/manual/ja/function.apc-define-constants.php https://pecl.php.net/package/hidef defineでしかできないこと defineは関数なので、引数には式であれば何でも書くことができる。関数の実行結果を書いてもOK。

    PHPで定数定義するときはdefine()よりもconstを使うべき - Qiita
    k-holy
    k-holy 2016/09/27
    define('ture',true) ってしとけば return ture とかtypoしちゃってもきちんと動くので安心!!
  • PHPのストリームでズンドコキヨシ - Qiita

    ズンドコキヨシまとめ - Qiita 機を逃した感じですが、ストリームを使った実装はまだ見かけないのでやってみました。 ストリームって何 PHPにおけるストリームは長大なバイナリを扱うための機構です。似たような仕組みにイテレータやジェネレータがありますが、ストリームはバイナリ列に特化していて、ファイルシステムを偽装できたり、ソケット通信と組み合わせられたりと独特の機能を持ちます。 まあ、C言語のストリームとほとんど同じですね。インターフェースもCを踏襲していて、node.jsのそれのようなAPIではありません。 ストリームを使ったズンドコキヨシ案 ズンとドコを無限に出力するストリームを生成する ストリームフィルタを使って出力を監視し、条件が整ったらキヨシを出力に追加する キヨシの後は何も出力しないようにして、ループを終了させる。 こんな感じでしょうか。無意味に複雑ですがストリームの勉強には

    PHPのストリームでズンドコキヨシ - Qiita
    k-holy
    k-holy 2016/04/05
    ズンドコストリームラッパ
  • PHP7で宇宙船演算子を使いこなすぞ - Qiita

    まずはPHP7リリースおめでとうございます!!! PHP 7.0.0 Released なんだか記念すべき日にAdvent Calendarを入れてしまって恐縮です。その割にすごい小ネタで書いてしまった…。 ここからPHP7では宇宙船演算子<=>が導入されます。だいたいこういう意味の演算子ですね。 // <=>と同じ意味の関数 function compare($a, $b) { if ($a < $b) { return -1; } elseif ($a > $b) { return 1; } else { return 0; } } compare(1, 2); // -1; 1 <=> 2; // -1; ユースケース的にはusort(), uasort(), uksort()との組み合わせで用いられるので、この機会にPHPにおける配列の並び替えについてまとめてみることにします

    PHP7で宇宙船演算子を使いこなすぞ - Qiita
    k-holy
    k-holy 2015/12/08
    ソートが相当シンプルに書けるようになる"宇宙船演算子"
  • 最小限のAtomフォーマット - Qiita

    最近、AtomをベースにしたXMLを書くことが多いので、必要最小限の要素をまとめてみる。意外と裏ルール(公式のスキーマファイルに記載されていない)が多くて正しいAtomを書くのは難しいです。 type=feed atom:feedをルート要素にする場合。 entryはなくてもいい id,title,updatedが必須。authorもentryが空っぽなら必須。 idはTag URIスキームを使うと短く書けるだろう。 authorはnameだけが必須。 link@selfはあった方がいいがMUSTではない。 <?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <id>tag:example.com,2012:1234</id> <title>sample feed</title>

    最小限のAtomフォーマット - Qiita
    k-holy
    k-holy 2014/11/13
  • Apache2.4+PHP-FPMのhttpd.confの個人的メモ - Qiita

    丁寧な解説を書くのが面倒なので個人的メモ。 Apache2.4と言えばevent-mpmが目玉。しかしPHPを素直にmod_phpとして使おうとするとprefork-mpmになってしまい、event-mpmが使えず何だかもったいない。 Apache自体はeventで、PHPPHP-FPMによるFastCGIで、と組み合わせる場合、mod_proxy_fcgiを使うと楽らしい。2.4から標準装備になっており、設定を有効にするだけで使える。 このページが詳しい。 PHP-FPM - Httpd Wiki http://wiki.apache.org/httpd/PHP-FPM インストール手順は省略。 httpd.confでは、この2行のコメントアウトを外しておく。 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_f

    Apache2.4+PHP-FPMのhttpd.confの個人的メモ - Qiita
  • コードをまとめる技術としてのイテレータとジェネレータ - Qiita

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

    コードをまとめる技術としてのイテレータとジェネレータ - Qiita
  • Zend_Db_Tableをもっと手軽に使う (コード解説編) #ZFhimekuri - Qiita

    Zend Framework 日めくりカレンダー2011の7日目、「間に合ってない」ってツッコミには土下座しつつ、Zend_Db_Tableをもっと手軽に使う(概要編) #ZFhimekuriの続き。 Githubに上げたサンプルコードの解説を書きます。 趣旨は「とにかくユルく、ActiveRecord風にZend_Db_Tableを使う」です。 1) 初期化はapplication.iniに。 データベースの接続先やパスワードをどこに書くかは開発者の悩みの種です。 素直にZend_Applicationをベースにしているアプリの場合は、application.iniに設定を書くだけでZend_Dbを初期化できます。 実際に使用するまでDBに接続しないので、実際にDBを使わないページが多くても安心です。

    Zend_Db_Tableをもっと手軽に使う (コード解説編) #ZFhimekuri - Qiita
    k-holy
    k-holy 2012/01/19
    Zend_Db_TableとZend_Db_Table_RowでActiveRecordっぽく
  • Zend_Db_Tableをもっと手軽に使う(概要編) #ZFhimekuri - Qiita

    「Zend Framework 日めくり Calendar 2012」の3日目の記事です。何となくQiitaで書いてみます。 Zend Framework でデータベースを扱う時の定番モジュールがZend_Dbです。公式のQuickStartがわかりやすいんですが、TableDataGatewayをDataMapperから使うというガチガチ厳密な使い方をしているので、「難しそう」「面倒くさそう」という印象を受けるかもしれません。 もうちょっとお手軽に、不真面目に使う書き方を考えてみます。解説を長々と書くとダレそうなので2日間に分割します。今日は概要だけ。 用語の整理 Zend_Dbについて少し解説。主要なクラスはこの3つです。 Zend_Db … DAL(PDOのWrapper) Zend_Db_Table … O/R Mapper(Table Data Gateway) Zend_Db_

    Zend_Db_Tableをもっと手軽に使う(概要編) #ZFhimekuri - Qiita
    k-holy
    k-holy 2012/01/19
    Zend_DbとZend_Db_Tableの使い方
  • 1