PHP

Pinocoでシンプルに正しく(&ぶっちゃけで)DIを理解する

PHP

Pinocoだって実はすごいんだぞ、Pimpleになんて負けないもん、というわけで、PHPメンターズ -> Pimpleでシンプルに正しくDIを理解するをPinocoで理解してみようというネタをやります。先にこれを見ておいてください。あ、「Pinocoってなんやねん、あっちょん…

HomebrewでPHP環境 現時点でのまとめ

MacでHomebrewを使ってPHPの開発環境を作るまとめです。HomebrewはMacPortsより圧倒的にコンパクトなのがメリットです。MacPortsでPHPをインストールすると、/opt/localに、Apacheを含め、すごい量のパッケージをインストールされます。PHPのビルドにApache…

「はじめてのフレームワークとしてのFuelPHP」書評

PHP

ご無沙汰しております。ものっそ久しぶりに書きます。著者様から献本頂いて、達人出版会発行の「はじめてのフレームワークとしてのFuelPHP」読みました。EPUBをダウンロードするやつです。http://tatsu-zine.com/books/fuelphp1stただのFuelPHPのテクニック…

PHPのarrayをリストとして使うときはunsetしちゃダメという話

PHP

タイトルそのまんまです。PHPのarrayは順序付き辞書なんだけど、リストに見えちゃうのでついついやってしまうのが $a[count($a)-1] こういうの。善良なプログラマほどこの罠にかかるから、こういうときはunsetじゃなくてarray_spliceを使おうね。

PHPのinterfaceなめんな

PHP

はいタイトルは釣りです。OOPのインターフェースはただの実装漏れチェック機能じゃないし、ましてや継承は差分プログラミングツールじゃないぞ。というのはわりと一般的な話だけど、Ruby(respond_to?でホントにいいの)とJava(インターフェースが自然すぎてユ…

CakePHP2のTwitterBootstrapプラグインがかっこいい

PHP

CSSフレームワークのような、Webアプリのフロント用ツールキットのような、TwitterのBootstrapがいい感じです。フォームのmargin/paddingの具合やプリセットの表現がほんとスマートで、やりすぎないのにすごく丁寧。http://twitter.github.com/bootstrap/そ…

PHPでHTTPレスポンスコードを返すときPHP_SAPI分岐は要るのか

PHP

こたえは「たぶん要らないんじゃないの」です。はいおわり、というのでは何の話かわからないので、以下に詳しく書いておきます。PHPのマニュアルで header() 関数を調べるとこんなことが書いてありました。 特殊な header コールが 2 種類あります。最初のも…

Pinoco等でも様々な列でのソートを改善してみる。

アプリケーションハンガリアンを用いて徳丸本の「様々な列でのソート」のサンプルを改善してみた。 http://tech.ecnavi.co.jp/archives/4606152.htmlという記事に触発されて、さらに、言語としての表現力がどれぐらい貢献できるか考えてみたいと思います。ブ…

PHP 5.4.0 Alpha3 でこういうコードが書けるようになる

PHP

何も言いません、これ見て驚いたらいいですよ。PHP5.4.0 Aplpha3 で実際に実行できたプログラムです。もう大興奮ですよ。Pythonだともっといろいろ書けるよ、とか、Rubyはmixin最初からあるよとか、その変数スコープJSだと当たり前すぎるとか、そういうツッ…

PHP5.4とScalaのトレイト比較

PHP5.4にはトレイトという文法が導入されて、多重継承の便利さが享受できるようになるそうです。 いろいろ試してみることにしました。トレイトといえば代表選手はScalaですね。Scalaでいうトレイトは、インターフェースの定義とメソッドの実装を同時にやって…

Pinoco0.5は柔軟なバリデータが売り

PHP

ついこの前0.4を出したところですが、また機能的にひと皮むけた感じなので、0.5としてPinocoマイナーバージョンの桁を上げました。 Downloads · tanakahisateru/pinoco · GitHubこちらが変更点の一覧です。 Changelog · tanakahisateru/pinoco Wiki · GitHub…

PHPTALはPHP互換でもある

PHP

XHTMLと完全に構文互換なPHPTALですが、実はテンプレートの中にPHPタグを入れることもできます。 <h1 tal:content="title">my title</h1> helpers->Html->link( sprintf( __("List %s", true), __("Posts", true) ), array("action" => "index") );?> $ctx はレンダリング時にテンプレート…

カレントディレクトリを一発でPinocoサイト化するコマンド

PHP

カレントディレクトリを一発でPinocoサイト化するコマンドができました。 localhostのApacheのドキュメントルート以下に適当なフォルダを掘って実行してみましょう。 curl -L http://pinoco-0.5.2で初期化.します.jp | sh シェルスクリプトのテキストの内容…

Pinoco0.4はクロージャですごくなる

PHP

Pinoco0.4.0をリリースしました。 Downloads · tanakahisateru/pinoco · GitHub変更点はこちらで簡単に。 Changelog · tanakahisateru/pinoco Wiki · GitHub重要な点は、データベースをサポートしたところ。もちろん単にPDO用のライブラリあります、ってだけ…

Pinocoで簡単メンテナンスモード

PHP

CodeIgniterで簡単メンテナンスモード http://d.hatena.ne.jp/localdisk/20110525/1306337920 って記事があったので、Pinocoだとどうなるかやってみます。 app/hooks/_enter.php page = '/_maintenance.html'; // 追加 $this->terminate(); //追加 /* 以下に…

PHPカンファレンス関西に行ってきました

PHP

PHPカンファレンス関西に行ってきました。行ってきましたというか、ついでにちょっと喋ってきました。で、そのあとなぜかいま、おうちハッカソンに来ています。 >> http://twitter.com/search?q=%23piece_networkとりあえず自分がLTで喋ったことDesigner fri…

PHPでfile_get_contents使ったHTTP接続がエラーなのかタイムアウトなのかを判別する

PHP

PHPでサーバ-サーバ間でREST-APIを使うとき、file_get_contentsを使うのが簡単なんですが、エラーレスポンスの場合、その状況をどう解釈したらいいのかという説明がどうもあいまいな気がしたので、ちょっと調べてみました。レスポンスコード200とエラー、そ…

PHP で Hello World ベンチマーク (Pinocoも)

PHP

驚きのベンチマークテスト計測結果を報告します。さまざまなPHP開発プラットフォームで、「何もしていない時にかかるオーバーヘッド」を計測したいと思い、可能な限り余計な処理を省いた Hello World プログラムで、ベンチマークテストを行いました。Webアプ…

PHPテンプレートエンジンベンチマーク パート2 Smarty vs PHPTAL

PHP

以前PHPのテンプレートエンジンの実行速度を比較しましたが、http://d.hatena.ne.jp/tanakahisateru/20081024/1224850023あまりうまく計測できていなかったのと、ソース公開してなかったのと、いいかげん使ったマシンが古くなってきた感があったという3つの…

Pinoco 0.2.3 リリース

PHP

拙作の「ダイナミックWebサイト向けフレームワーク」、Pinocoを公開します。悩ましいバグが取れたので、今こそ言うタイミングだ、ということで。pinoco - web site environment using PHP and TAL - Google Project Hostingこのところブログの更新が怠ってい…

PHPで安全に例外を投げる方法

PHP

ただの例外じゃユーザが補足できないし、かといって、あらゆる例外シチュエーションを自分で定義するのも、それはそれでユーザのAPI学習負担を高めてしまう。なので、標準の例外、たとえばRuntimeExceptionを投げたい。でも、PHP5.2(だったと思う)までは、SP…

PHPのnewに再チャレンジ PHP5.3

PHP

PHPのnewはこれで置き換えだ - なんたらノート 第二期 で書いたのは、どうもPHP5.3ではダメっぽいです。PHP5.3では、evalの実行コンテキストが、関数内ではなくグローバルになる(でも変数はローカルのをレキシカルに束縛してる)というトリビアがありました…

PHPで動的継承

PHP

Rubyにある特異クラスや特異メソッドの便利さを、PHPでも実現してみようと試みました。Rubyの特異クラスは、すでにインスタンス化された、クラス不明なオブジェクトに、オーバーライドでメソッドを追加するものです。特異クラスはスクリプト言語ならではの機…

PHPにPATHを通すとPidginがクラッシュする

Windowsで、最近のPHPにPATHを通すと、Pidginがクラッシュします。どうやら、php.exeと同じフォルダに置かれるようになった、aspell-15.dllが競合している模様。 PidginはスペルチェックにAspellを使っていて、それはPidginとは異なるフォルダにインストール…

PHP5.3どのビルドを使うのか

PHP

http://windows.php.net/download/にて、計4種類のPHP5.3 Windowsバイナリが配布されています。というか、すでに5.2の時点で2種類ありましたが。これらのうち、どれを選ぶべきかという基準について、軽く調べたり推測したりしたメモです。 VC6かVC9 これは、…

エルビスよ、aかbかcかdから肯定値を取り出せ

新しいPHPとかGroovyとか次のJavaとか、三項演算子の省略でElvis演算子(?:)なるものがあるそうで、どのぐらいおいしいのかを考えました。エルビス演算子へのニーズって、三項演算子(cond ? a : b)はやっぱり評価されるべきものだよね、ってことを意味してる…

PHPのnewはこれで置き換えだ

PHP

PHPの new は、オブジェクト生成後、変数に格納してからでないとそのメソッドが呼べません。ああダサいダサい。 myMethod(); //構文エラー $tmp = new MyClass(); $tmp->myMethod(); //こうしないといけない ?> あと、どこで競合するかわからない__autoload…

イテレータオブジェクトのバグを再現した

PHP

PHP5.3.6ではこの問題が発生しなくなっていました。きのうの http://d.hatena.ne.jp/tanakahisateru/20090827/1251379409 を再現できるコードをのっけときます。

PHP言語エンジンのif文の数は世界一ぃ〜〜〜

PHP

PHP5.3.6ではこの問題が発生しなくなっていました。PHP5.2.6なんだけど。イテレータでまわせるオブジェクトを書けるので、まわしてみた。

こいつはPHPのせいじゃない、日本人のせいだ

PHP

正直驚いた。PHPがいくらか設計ヘタクソなのがかわいく思えるぐらい、びびった。英語読めないバカがマニュアル翻訳するな。PHP: 関数の引数 - Manualにある謎の一文 注意: PHP 5以降、デフォルトで値はリファレンス渡しとなります。 をちゃんと理解しないと…

WindowsのPHPトリビア

PHP

Windowsだとこんな感じ。 echo dirname("/foo/bar"); // => "/foo" echo dirname("/foo"); // => "\"Linuxだともちろん、"/"になる。ていうか、 http://www.php.net/manual/ja/function.dirname.php なにこれ。

IBMごときに何をうろたえるか

PHP

ちょっと前なんですが、 セキュアな PHP アプリケーションを作成するための 7 つの習慣 について、「大手さんだから安心」? - がるの健忘録 から、「セキュアなPHPアプリケーションを作成するための7つの習慣」のサンプルがとんでもなく酷い - ockeghem(徳…

PHPをevalしてシェルの代わりに使う

PHP

PHPコードをページからPOSTしてevalする - なんたらノート 第二期で作ったスクリプトを使って、 system("ls -al /etc"); system("cat /etc/httpd/httpd.conf"); なんかを実行すると超便利(超危険)だということに気づいた。相手サーバのシェルにつなげない状…

PHPテンプレートベンチマーク ---- PHPTALに注目

PHP

PHPTALのチュートリアル http://phptal.org/manual/en/split/firstexample.html を、 プレーンなHTML(出力結果のダンプ) ネイティブPHP 5.2 Smarty 2.6.20 PHPTAL 1.1.3 のそれぞれで書いてみて、ベンチマークを取ってみました。(ただし、テーブルに流し込…

メタ言語PythonでPHPのラインタイムをモデル化して理解する

メタ言語としてPythonを使い、PHPの変数やらリファレンスやら周辺の、ランタイム実行モデルを表現してみた。あの変な「リファレンス」ってやつの正体はなんなのか、ってね。今の自分の解釈を書き留めておきたいんだけど、いくら自然言語で説明しても、マニュ…

PHP配列トリビア 配列の正体は辞書

PHP

忘れそうなのでメモ。格納順序が不自然で、インデックスは連続している配列があるとする。 Array ( [0] => 0 [1] => 1 [2] => 2 [5] => 5 [4] => 4 [3] => 3 )foreachでは格納順に処理される。 $e){ echo "[" . $i . "]=". $e . " "; } echo "\n"; ?> [0]=0…

PHPコードをページからPOSTしてevalする

PHP

ありがちかもしれないけど、PHPコードをページからPOSTしてevalする対話的プログラムの窓口を書いてみた。CLIが封じられてる環境だと、エディタ→FTP→ブラウザ→ソースを見る→エディタ→FTP→ブラウザ→...がめんどくさいので。あと、管理で楽するために、「テス…

そうか、Kohanaが急激によくなっているんだ

PHP

Kohana2は急激に良くなっている。こっちは 宣伝に偽りありで申し訳ございません -- CodeIgniter自体は急激に変わっていない - なんたらノート 第二期 こんなことなく、個人的な感覚とは関係ないお話。よくあるフレームワークと違わないと思って名前しか知ら…

CodeIgniterにリレーション解決サポートを

PHP

CodeIgniterにリレーション解決をサポートするライブラリを書きました。librariesに入れてload->library()で使います。CodeIgniterにはSQLクェリビルダはあるけど、エンティティの関連性を補助する機能がまるでありません。あるレコードに関連する別のレコー…

PHPオブジェクトのフィールドに名前文字列でアクセス

PHP

Pythonでいう、 o = some_oblect() n = 'new_field' setattr(o, n, 'new value') で、JavaScriptでいう、 o = new Object(); n = 'new_field'; o[n] = 'new value'; をPHPでやりたい。 $n = 'new value'; ?> が正解。これを思いつかず、APIを探して見つから…

宣伝に偽りありで申し訳ございません -- CodeIgniter自体は急激に変わっていない

PHP

http://d.hatena.ne.jp/tanakahisateru/20080924/1222190229 を受けて、 http://angelicwing.net/diary/5012.html と思われたみたい。宣伝に偽りありで申し訳ありません。えぇと、そうです、CodeIgniter自体が急激に良くなってるわけじゃないです。彼が主観…

PHP配列のインデックス外アクセス

PHP

構文チェックを厳しくしてると、 PHP Notice: Undefined offset: 3 という警告が出る。でも、 --警告なし --警告なしでなぞの非表示値が表示されてる 配列アクセスと同時に実体コピーが起こるとだめっぽい。配列アクセスと実体コピーが別の文ならいいらし…

私が間違っておりました

PHP

CodeIgniterが急激によくなってきた - なんたらノート 第二期で書いた、 バリデーションがダサいまずライブラリのメソッドの中身に「$_POST」がハードコーディングされているため、任意の変数をバリデートできない。 バリデーションは「何らかの境界で、正体…

CodeIgniterの余計なお世話

PHP

CodeIgniter(CI)は"?"以降のクエリ文字列を綺麗に無視し、$_GETを空っぽにしてくれる。CI曰く「パスベースのルーティングがあれば、クエリ文字列なんて要らない」もしくは「GETリクエストにオプションパラメータなど許してはいけない」だそうな。おいおい、…

前略、PHPとかプログラミングに対して思ってること

PHP

http://webbingstudio.blog10.fc2.com/blog-entry-564.html からはじまり、 http://d.hatena.ne.jp/riaf/20080922/1222056153 http://d.hatena.ne.jp/bobchin/20080923/1222148540 http://d.hatena.ne.jp/iakio/20080923/1222161332 http://d.hatena.ne.jp/s…

CodeIgniterが急激によくなってきた

PHP

CodeIgniterを評価しました。申し訳ないけど、このブログエントリの著者が学生さんだと知りつつ、きつく批判します。 CodeIgniterの嫌な部分 | Oddwit 某巨大掲示板でも、このブログと同じような議論がありました。 これを批判することが、CodeIgniterの良さ…

共有サーバでPHPマルチ環境

PHP

.htaccessでphp.iniのオーバーライド このエントリは2007/02/03の再掲です PHPは、その適用されている範囲の広さにもかかわらず、JavaEEのサーブレット仕様のように、アプリケーションコンテキストという環境設定単位を持ちません。そのため、ひとつのWebサ…

文字エンコーディング混在PHPページ

PHP

このエントリは2007/06/21の再掲です ひとつのロケールに複数の文字エンコーディングがある、日本語のような言語では、ひとつの動的Webページを書くだけでも、部分ごとにエンコーディングの向き不向きがあります。多くのWebブラウザがShift_JISを好むことか…