ログ日記

作業ログと日記とメモ

PHP

PHPStan が早い

PHP

PHPStanのデフォルトのルールを変更したくて、どうすれば良いか分からなかった。 デフォルトの config.neon を変更する方法を教えてってissueに書いたら10分後に返信来た。 scopeClassを変更すればgetType()で何でもできるよ、でも全体で一つの拡張しか使え…

フラッシュセッションにハマる

PHP

前にも同じ問題でハマったのに忘れていて再びハマったメモ。 リダイレクト前にセッションに値を保存して、リダイレクト後のページで取り出して、削除するような一度だけ使うセッション変数にはフラッシュセッションを使う。 セッション系ライブラリには大抵 …

スタートアップがPHPを使っていると聞いた話

PHP

この前、外国のスタートアップをやっている人にサービスを見せてもらった。 Qiitaによく書かれているような新しめのフロントエンドの技術盛り沢山で、クラウドや聞いたことのないようなサービスからTrelloのような知っているサービスなど色々使いつつ、なん…

php-modeとyasnippetを更新した

最近の無名関数が綺麗にインデントされるようにemacsのphp-modeを更新した。 https://github.com/ejmr/php-mode.git これをcloneして使っていたのでpullしただけ。 Emacs23だとうまくいかなかったのでEmacs24に更新。 apt-get install -t wheezy-backports e…

Composerの検索をローカルにする

PHP

いつも忘れるのでメモ。 あらかじめ外部ライブラリはローカルにgit cloneしておく。 composer.json "repositories": [ {"type": "vcs", "url": "/home/user/repo/my-framework"}, {"type": "vcs", "url": "/home/user/repo/my-lib"}, {"type": "vcs", "url":…

今更PHPでモナド的なものを書く

PHP

http://blog.dakatsuka.jp/2013/09/03/php-maybe-monad.html この辺とか http://d.hatena.ne.jp/kazu-yamamoto/20110413/1302683869 この辺とか見てたらちょっとやってみたくなったので。 ○○言語でMonad実装って結構あるけど、MonadPlus使えないとあまり意味…

ぼんやり振り返り

顧客は本当に欲しいものは知らない、と言うけれど同じような症状だ。 かゆいところに手が届かない。 自作フレームワークがつぎはぎになってきたのでカッとなって作ったやつ。 PHPの小規模用テンプレートエンジンを作った - より良い環境を求めて なんかアノ…

流れるようなインターフェースをtraitで

PHP

ぼんやり思ったことのメモ。 たとえばDB接続なら from('item') ->join('category') ->on()->over(['category.status' => 'item.status']) ->like(['name' => 'my item']) ->order('code') ->offset(100) ->limit(10) ->get(); とかやりたい。 今までさくっと…

Debian wheezyにphpenvでPHP複数バージョンの共存

かなりハマったのでメモ。 基本は http://qiita.com/uchiko/items/5f1843d3d848de619fdf こちらを参考に、一般ユーザー権限で操作する。 git clone https://github.com/CHH/phpenv.git phpenv/bin/phpenv-install.sh mkdir ~/.phpenv/plugins cd ~/.phpenv/p…

PHPの自作フレームワーク現状まとめ

https://github.com/nishimura/laiz2 基本方針 DB設計最優先 HTML構造優先 コード量を少なく 大抵の処理はPage(Action)クラスに書く。いわゆるAction肥大化。もし「この二つのテーブルは大抵joinして取得している」という状況になったらModelを作っても良い…

テンプレートエンジンにフォーム値の設定機能を付けた

PHP

https://github.com/nishimura/laiz-templateこれでデザイナーから大量のinput type="checkbox"が入ったHTMLを渡されても、正規表現置換で一瞬で対応できる。 簡単なマニュアル書いた。 if文 hasError変数がtrueの時(if ($hasError))だけタグ内を表示します…

Zend\Di の依存関係ループを解消する

勘違いしていたので追記SessionManager は 複数扱えないので、セッションを複数持つ場合は以下のようにして名前空間だけ分ける。 storage = $storage; } } class SessionManager{ public function __construct(SessionAdapter $adapter){ $this->adapt…

'Invalid instantiator of type "NULL" for "Zend\\ServiceManager\\ServiceLocatorInterface".

Zend\ValidatorPluginManager や Zend\Filter\FilterPluginManager などの PluginManager系をDIで取ろうとするとエラーになる。 同じ問題をやっている方が居た。 http://d.hatena.ne.jp/noopable/20130304 ここを詳しく読む前にやったので、全然別の方向から…

Zend\Di でコンストラクタインジェクションをチェーンするのは面倒くさい

一般ユーザー用画面と管理者画面があるとする。この二つで別々のセッション管理をしたい。 その場合、ここにあるようにaliasを設定すれば一応できる。 addAlias('dbadapter-readonly', 'MyLibrary\DbAdapter', array( 'username' => $config->db->readAdapte…

PHPのフレームワークを作った

ソースはここ: https://github.com/nishimura/laiz2composerの使い方を見るのも兼ねてサンプルアプリを置いたのですぐにインストールできるはず。 https://github.com/nishimura/laiz-sample-task composer.phar create-project laiz/laiz-sample-task laiz-…

yasnippet の php-mode を更新した

https://github.com/nishimura/minimal-yasnippet-php-mode今更ながらPHP5.3 の namespace に対応した。

Zend Framework の一部を使おうとしてハマった

PHP

症状は、composer.phar で zendframework/zend-validator を入れようとすると zendframework全体がインストールされる。 原因は、zendframeworkのcomposer.jsonが良くないっぽい。 依存関係を追っていくと、どうもzendframework/zend-i18nを入れようとすると…

PHPのフレームワーク再考

PHPのフレームワークを考えている。 2006年からLaizを作り始めたわけだけれど、普通に利用する機能と実験的機能がごちゃ混ぜでフレームワークが肥大化している。 特に、PHP5.3用に変更したときにPHP4のコードをそのまま持ってきたり新しい仕組みを取り入れた…

PHPで内部用ストリームAPI

PHP

内部用のAPIを作ろうと思ったときに、データが多い場合のことを考えると面倒だったりする。 offsetでページ切り替えするか?とか。 で、基本に返ってストリームから少しずつデータを取得すればいいんじゃないか、というC言語の初歩的なやつをPHPで。 put.php …

PHPはリソースを解放しない方が良い?

PHP

今更ながら、目から鱗。 明示的にリソースを解放しない場合はHTTPコネクション切断後、つまり リクエストシャットダウン時に解放されます。 明示的にリソースを解放した場合、HTTPコネクションがある状態、つま りユーザーにページを送っている最中にリソー…

PHP5用のORM作った その2

PHP

昨日 *1 の続き。 https://github.com/nishimura/Tsukiyo Joinの条件指定が欲しい、or検索が欲しい、テーブル名指定のjoinが欲しい、ということで機能追加。ほぼS2JDBC。 段々コードが見づらくなってきたかも。 OR検索 orやandが予約後なので、苦肉の策で変…

PHP5用のORM作った

PHP

O/Rマッピングライブラリを自作した。 ずっと前から自作ORMを作り替えたいと思っていて *1 、S2JDBCのようなものが作りたいからどうせならJavaやるかと思ってJavaをやり始め、やっぱりJavaよりPHPがいいと思ってPHPに戻ってきて、そうしたらまたORMに不満が…

PHPの小規模用テンプレートエンジンを作った

今までPHPで何かを作るときはLaizを使っていたわけだけれども、レンタルサーバー的な構成だと使いづらい。 数ページのフォームとかだとPATH_INFOに対応するためにApache設定ファイルにAliasMatchを書いたりフレームワーク設定ファイルを書いたりするのが面倒…

いろんなPHP Webフレームワークで同じ画面を作ってみる (Laiz編)

PHP

元ネタはJavaなのでGWTでやろうと思ったけど画面遷移がないのでRPCを使ったとしてもうまく仕様に合わせられない。MVPで途中まで書いたがイマイチに終わり…代わりにPHPで。 仕様はこれ。 足し算プログラム 計算結果は、別画面に遷移し出力する。 submit時にリ…

バリデーターあれこれ

今更ながら。 バリデーターを書く場所について悩んでいる。 バリデーター(or フィルター) アクション ビジネスロジック という階層があるとき、ビジネスロジックで何らかのエラーがあった場合はエラー画面を出したい。 具体的には、 +----------+ |ユーザ…

サブドメインをまたいだセッション管理ができなくて長時間ハマった

PHP

サブドメインをまたいだらセッションがクリアされて、色々試していた。 どうも異なるホストだとクッキーを共有できないような動きになっていた。 原因はsuhosinパッチ?extension?だった。 入れたつもりはないけれどaptで自動で入っていたみたい。 オプショ…

ハッシュ関数がよくわからない

PHP

cryptはdesがどうのこうのでダメだという話がよくあるが、cryptとmd5やsha1やhashの違いがよくわからない。

テストコード

PHP

http://d.hatena.ne.jp/shimooka/20100422/1271905286これ凄いな。 今のプロジェクトで測ってみると、20000:4000だった。0.2倍…。 バグを出せない数値計算系しかテストしてないからなんだけど、、普通は何倍もテストコード書いてるのかな。普通ってアレだが…

タイプヒンティングからオブジェクトの配列をインジェクションするためにネームスペースを使って動的にクラスを生成する

オートロード関数を登録する。 動的にネームスペースを生成してクラスを定義してオブジェクトを生成する。

オレオレフレームワークのメモ

Maple再起動で振り返る国内PHPフレームワーク戦争の歴史 – この先生きのこるには ここにフレームワークの歴史が。 今もここの第3世代のまま進んでる感じなんだろうか。もう何年も前の記事だけれども。 xFrameworkPX コアの開発は一人だったような…たしか。 h…