PHP

parse_ini_file_ex()

PHP

ちょっと正規表現使いすぎかも・・もう少し簡単にできるかもしれない。 function parse_ini_file_ex($file){ if (!$lines = file($file, 1)) return false; $res = array(); $curr = & $res; $sectionPattern = '/^\[([^\]]+)\]/'; // キーに記号を使いたい…

拡張(縮小?)parse_ini_file()関数

PHP

/** * parse_ini_file extension * * @param string $file * @return string[]|false * @access public */ function parse_ini_file_ex($file){ if (!$lines = file($file, 1)) return false; $res = array(); $curr = & $res; $sectionPattern = '/^\[([^\]…

グローバル関数

ネームスペース代わりのクラス、例えば if (!LaizUtils::file_exists($path)) return false;みたいにやった方がいいのかな。 関数が増えてきたら標準関数拡張用クラスを作ってみようか。。

parse_ini_file()

PHP

単純な関数でも意外と知らないことが多いな・・。 parse_ini_file()はinclude_pathを見ないのね。 ということで http://d.hatena.ne.jp/hawkring/20050617/1119009631 を参考に include_path を考慮したparse_ini_file()を用意しようかな。 今となってはpars…

Debianでのpearのインストール先

PHP

hawklab.jp 分かり易いなぁ。 Mapleをインストールしたらmapleコマンドが/usr/bin/にインストールされた。 なんでこんな場所にって思ったけど、パッケージで指定してあるんじゃなくてDebian特有なのね。。

ハマりどころ日記になってなくもない

PHP

@(エラー制御演算子)でエラー抑制っていうのは、関数実行の直前にerror_reportingがゼロに設定されて関数を抜けた後に元の値に戻る。 ユーザ定義のエラーハンドラを使ってる場合は注意。 初めて気付いたけどincludeなどでファイルを読み込むとき、include_pa…

include_path

開発中のmapleを参考にしてinclude_pathを柔軟にしてみる。 mapleのディレクトリ構成だと webapp/core でコアを書き換える。Laizの場合はコアもwebappも共用(?)したいのでこの方法がうまくいかなさそう。 なのでディレクトリ構成を laiz/core laiz/webapp…

どこまでテストを作るか

テストファーストはいいんだけれど、全ての関数にテストを作るのはどうなんだろう。 例えばvalidatorクラス。 これはほとんど実装部分の処理は無い。 数値かどうかを確かめる関数は function isNumeric($a){ return is_numeric($a); }これだけ。これはそもそ…

改造版Flexyのアップデート

flexyのバージョンアップに追いついてなかったのでフレームワークのバージョンアップのついでにFlexyのパッチも作ってみる。 ついでと言うほど簡単ではないが・・自分の書いたNishimura's Siteこれがかなり役に立つ。 一応 Tokenizer.lex を修正せずにlexに…

リンク元

最近php+フレームワークでの検索が多い。 [PHP-users 30036] Re: フレームワーク この辺の影響だろうか。 どうせフレームワークを作るならPHP5も使ってみたい・・。 Debianの公式パッケージに入るのは何年後だろう。。 [debian-users:43746] Re: php5 の対応…

リファクタリングメモ

放っておくと事態は悪化するので、重い腰を上げて直すことにした。 まずはファイル名の変更。 Hoge.class.php を Hoge.php にする。 そしてテストコードを書きながら気になった部分をリファクタリング。mapleみたいにコアを差し替えたりするわけじゃないので…

mapleを入れてみる

PHP

hawklab.jp今度のジェネレータはシェルスクリプトになってるぽいので、pearコマンドで入れてみる。/usr/bin にmapleコマンドがインストールされた。書いてある通りにやるとwebappは出来るんだけども、、あれ?htdocsってどうやって作るんだっけか。 generato…

コンテナ

何だか違和感が無くならない。 普通のコンテナを使ったことがないのにDIコンテナを使おうとしたからだろうか。 どうもグローバル変数的に乱用してる気がする。 これに最初に気付いたのは後からテストコードを書くときで、一つのクラスをテストするのに何個も…

リファクタリングしたい・・

クラス名とファイル名を書き換えたい衝動に駆られる。 しかしテストコードが少ししかない・・。 ファイル名を書き換えるならテストコードがあったとしてもそれも書き換えないとダメか。 hoge.class.php => hoge.php DIContainer => SimpleContainer or LaizC…

HTTP_Download

PHP

トラックバックをもらったので調べてみる。 PEARって全然詳しくないので基本的なパッケージも知らない。 HTTP_Downloadはファイルを送出するためのものっぽい。 他にもHTTP_*には便利なものが沢山。 だけど、使う必要があるのかどうかは分からない。 前にフ…

環境

PHP

mixiのPHP環境スレ [mixi]これぞ最強のPHP開発環境ってある!? - Let's PHP | mixiコミュニティ svnのコミットをトリガーにしてアップしてる人って実際に居るんだなぁ。 仕組みとしては知っていても実践までなかなかいかない。 この場合は コードを書く テ…

フレームワーク

PHP

[PHP-users 29994] フレームワークたまにフレームワークについての話題を見かける。 こういうときに胸を張って他人に勧められるフレームワークが完成してるといいなぁ。 自分のフレームワークは簡単なページを手早く作るのには向いているけれど、大人数(?…

エラー制御

今日のハマりどころ。 フレームワークのエラー制御と標準のエラーハンドラを統合するところで気が付きにくいポイントがあった。 set_error_handler()でユーザ指定の関数を登録すると、@(エラー制御演算子)がついてる場合でもエラーが表示されてしまう。標…

ファイルアップロードの処理

PHP

[PHP-users 29980] 別サーバーへのアップロードこれは私も知りたい。 既にsocketを使ったベタな関数は作ったんだけど、もうちょっとスマートにやりたいなぁ。 できればsimpletestに組み込んでほしい・・。

受け入れテスト+アップロード

simpletestでグリーンのバーが表示されたら、アップロードボタンを表示するようにした。 それを押したらrsyncで本番用にアップロードが開始される。 デメリットは、例えば一文字変更しただけでも全てのテストが終わるのを待たないといけないところ。 PHPの手…

確認画面

フォームの要素が何十個もあったら、すこぶる面倒だ。 フレームワークを使って設定ファイルに変数を羅列するだけで済んでいるんだけれど、それでも面倒だ。 現在たった2画面での受け入れテストのassert()が400個・・・手動でテストコード書いてたらやる気な…

トランザクショントークンの削除

PHP

トランザクショントークンは削除するか別の値を設定するかしないとダメでしたね。 更新ボタンを押した場合にエラーにならない。 そのタイミングは自動で行った方がいいのだろうか。。 取り敢えず自動にしたけれども、投稿ボタンをダブルクリックした場合はセ…

トランザクショントークン

mixiにレスしながら思った。 トランザクショントークンで使った変数は破棄すべきか?破棄するとしたらそのタイミングは? トランザクショントークンを破棄してその後DBにデータを登録しようとしているときに、二重クリックされたら・・。 mixiではセッション…

simpletest実行の戻り値

API docを見てると、$groupTest->run($reporter) の戻り値はvoidになってる。 でもソースを見たら単に戻り値のコメントを書いてないだけであって、bool型を返却するようになっていた。 そうそう、これが欲しかったのですよ。 これがあると定期的にテストを実…

受け入れテスト

iniファイルからの受け入れテストが実用的になってきた。 ちょうど今、入力項目が30個ほどあるフォームを作っててこれを受け入れテストファースト(?)でやってるところ。 リストあり、ラジオボタンあり、テキストエリアありで、無いのはパスワード入力とチ…

受け入れテスト

simpletestって、例えばinputタグのtypeがtextだっていうチェックは出来ないのね。。 仕方がないからソースを取得して正規表現で検索することに。 ; Top.ini [main] url = http://www.example.com/ basicId = user basicPassword = pass [text] toptext = "i…

リファクタリング。。。

http://k-holy.sakura.ne.jp/fp/index.php?id=06070002 こちらで紹介されていたので、自分のコードを見直してみると・・・自分のコードが読みにくい。。。Viewは長い間見てなかったからすっかり忘れてしまった。 そして意味のないコードを何カ所か発見。。 V…

maple-3.2を試してみる

hawklab.jppearコマンドを使わずに普通にDLしてみた。 pearのディレクトリに入っていないので php -d include_path=`pwd`/Maple-3.2.0a1 Maple-3.2.0a1/maple/generate/script/generate.php webappのようにする。 また、htdocs/index.phpに ini_set('include…

テストのメモ

知っておきたいテストの“イロハ”(1) | 日経 xTECH(クロステック)るびまRailsいいな。 でも機能テストはやっぱりプログラムで書きたくないな。

DIContainer

PHPのフレームワークでもDIコンテナってある。 ぱっと思い付くのはmapleとguessworkだけども。 前から名前が疑問で、自分の中ではただのコンテナでいいやんって思ってて。 アジャイルの本を読んでたらその思いがますます深くなった。 DIContainerはインター…