PHP

PHP 5.3/6.0の名前空間とは

PHP

ぶっちゃけ本当の意味での名前空間ではありません。ちょうどPHPの無名関数が実はナル文字で始まる名前付きの関数であるように、ある名前空間において定義されたクラスや関数は、普通にスクリプトに記述するとパーズエラーとなる名前で共通のシンボルテーブル…

php_iovm 0.3.0

php_iovm-0.3.0.tgz説明を書く前にバージョンアップしてしまいました。 ビルドにはIoの最新版、Io-2007-10-03かgitの開発版が必要です。IoStatePrintCallbackの引数が変わったのでIo-2007-05-28ではビルドできません。 変更箇所は下記のとおりです。 PHP/Io…

エクステンションでforeachを簡単に書くには: イテレータ対応版

PHP

zval_foreach.h (ヘッダのみ) zval_foreach_example.tgz (CodeGen_PECLで生成したコードとサンプルスクリプトつき) IoでPHPのイテレータに対してforeachさせたかったので、イテレータ用のITER_FOREACHマクロを作成しました。マクロの内容はこのようになって…

エクステンションでforeachを簡単に書くには: PHP6対応版

PHP

PHP6ではUnicode対応のためハッシュテーブルのキーなどで引数の型が char ** から zstr * になっており、以前のHASH_FOREACHマクロは使えませんでした。 今回のものはIS_UNICODEが定義されていればUnicode対応のHASH_FOREACHマクロを定義します。 hash_forea…

php_iovm-0.2.0: IoでのPHPサポートを強化

php_iovm-0.2.0.tgz説明は後で書く予定なので概要だけ。 IoでPHPのクラス定数、スタティック変数、スタティックメソッド、インスタンス変数、インスタンスメソッドが利用できるようになりました。(少々ダサい使い方になりますが) 逆にPHPでIoObjectのスロッ…

php_iovm-0.1.1: echoが要らない子に

php_iovm-0.1.1.tgz Ioは組み込み指向の言語であるわけで。ということは出力用コールバック関数が定義できて当たり前なわけで。 IoState_printCallback_でphp_body_writeのラッパーを指定するようになったので、PHP echoは、ほとんどの場合において不要にな…

php_iovm-0.1.0: PHPとIoの連携を強化

php_iovm-0.1.0.tgz ポインタ、intptr_t、longの大きさが異なる環境でも使えるようになった IoからPHPの定数・変数・関数が利用できるようになった IoからPHPの"echo"が利用できるようになった IoStateクラスにメソッドを追加 IoからPHPの定数・変数・関数を…

unicharとdcomplexをマイナーアップデート

php_unichar-0.1.1.tgz php_dcomplex-0.1.2.tgz php_unichar-0.1.1 UTF-8文字列の各文字のコードポイントをずらす関数 unistr_rotate() を追加。 例:

PHP5で配列のコピー時の挙動も変わっていた件

PHP

オブジェクトと同じくHashTableの複製はせずにリファレンスカウンタを増やすだけになってたんですね。 ちょっとテストしてみた結果はこうなりました。スタイルシートのせいで表が見にくいのは勘弁してください。 個人的に結果2b (PHP5) での$c、結果3a (PHP4…

Ioバインディングを朝ハック

php_iovm-070922.tgz寝起きで改良。 IoObject→zvalの変換ができるようにして、IoState::doCString()の戻り値を取得できるようにしました。対応する型はこれだけです。他の型は文字列で <IoObject:name:address> となります。 Io PHP nil null true true false false Number double S</ioobject:name:address>…

エクステンションでforeachを簡単に書くには

PHP

PHPCon2007でも少し話したことですが、PHPエクステンションを書くとき、PHPのforeachに相当することをしようと思うとちょっと面倒です。 そこで、IoのLIST_FOREACH/PHASH_FOREACHを真似してforeachを簡単に書けるマクロを作ってみました。 aにハッシュテーブ…

IiP - Io in PHP

php_iovm-070920.tgz ちょーシンプルなIoバインディング。息抜きがてらにさくっと作ってみました。 IoStateオブジェクトと、引数として与えられたコードを実行するdoCStringメソッドだけしかありません。 本格的に作り込む時間がないので、しばらくはこのま…

秋のPECLまつり

php_qr-0.3.1.tgz php_yaml-0.1.1.tgz php_senna-0.1.0.tgz -> php_senna-0.1.1.tgz (SenRecordsのイテレータとしてのふるまいを修正) php_unichar-0.1.0.tgz php_dcomplex-0.1.0.tgz -> php_dcomplex-0.1.1.tgz (テストケースを追加、他少々) php_opendogs-…

オレオレパッチふたたび

PHP

CLIで常用でない (php.iniで読み込むようにしていない) エクステンションをちょっと使ってみるのに便利なパッチ。 コマンドラインオプションで --dl foo とすることで -d extension=foo.so や dl("foo.so"); の代用ができます。 僕以外にこれで嬉しい人がい…

GDで作成した画像をICO形式で出力する

php_gdextra-0.2.0.tgz Windows ICON (.ico) ファイルフォーマットを調べてみたところ、ヘッダが少し異なるのとマスクデータがあるだけでアイコン本体はBMPだったので、先日のブツにICO形式で書き出す関数を追加してみました。 また、BMP出力でも従来の8,24…

GDで作成した画像をBMP形式で出力する

php_gdextra-0.1.0.tgz GDエクステンションと連携して使う、画像処理のための新作エクステンションです。 表題の機能のほか、ImageMagickを使って読み込んだ画像をGDの画像リソースに変換して返す機能もあります。 PHP5なら素直にimagickエクステンションを…

php_opendogs 0.5.0 Released

php_opendogs-0.5.0.tgz 変更点 数値文字参照とXHTML 1.0で定義されている文字実体参照をUTF-8としてデコードする関数 string od_unistr_decode_entity(string str[, int flags]) を追加 第一引数はデコード対称の文字列、第二引数はデコードオプションで下…

php_yaml 0.1.0 Released

php_yaml-0.1.0.tgz 変更点 デフォルトで全てのYAMLドキュメントをパースしていたのを、最初のYAMLドキュメントだけをパースするように仕様変更 オブジェクトが複合キーに指定された場合、serialize()する前に__toString()を試みるようにした エイリアスをリ…

php_qr 0.3.0 Released

libqr-0.3.0.tgz php_qr-0.3.0.tgz libqrの変更点 QRCodeオブジェクトを複製する関数 QRCode *qrClone(const QRCode *qr, int *errcode) を追加 QRStructuredオブジェクトを複製する関数 QRStructured *qrsClone(const QRStructured *st, int *errcode) を追…

PHPカンファレンス2007プチレポート

PHP

もうあれから6日が経過しようというところですが、遅ればせながら。 PHPカンファレンス2007に参加、「今日からはじめるPHPエクステンション」という演題で喋ってきました。 久々のプレゼンということもあり、すごく緊張していました。もっと滑舌よく、手際よ…

オブジェクトのプロパティをマージ

PHP

OpenDogsエクステンションの次期バージョンではarray_merge()のオブジェクト版を実装する予定です。 返り値は与えられたオブジェクトのクラスによらず、stdClassのインスタンスです。 /* {{{ proto object od_object_merge(object obj1[, object obj2[, obje…

Piece Framework勉強会に参加してきました

先週末のことになりますが、第8回Piece Framework勉強会に参加してきました。 こちらのミスで飛び入り参加のようなかたちになってしまいましたが、快く迎えてくださってありがとうございました。>all (あとで申し込みのメールを見直してみたら、サブジェク…

php_qr 0.2.2: OO-APIのバグ修正

php_qr-0.2.2.tgz QRCodeクラスでmaxnum=1のとき、finalize()をコールしても内部的にfinalizeしたことになっていなかったのを修正しました。

オレオレパッチ

PHP

ちょっとだけ便利になるパッチたち。PHP 5.2.3 向けです。 php-5_2_3-config-file-scan-dir.patch CLI とその他 SAPI で config_file_scan_dir を分ける。 CLI 用の config_file_scan_dir は configure --with-config-file-scan-dir で設定したパスに接尾辞 …

ブログアプリケーションの作成ですと!

技術評論社のサイトで連載 Piece Frameworkによるブログアプリケーションの作成 が始まりました。 Piece Frameworkは,本質的な開発の実践のためのアプリケーションフレームワークです。この連載では,簡単なブログアプリケーションの作成を通して,ステート…

php_qr 0.2.1 & php_yaml 0.0.4

いずれもメンテナンスリリースで、新機能等はありません。php_qr-0.2.1.tgz 標準で読み込まれるヘッダで TRUE および FALSE が定義されていないとコンパイルできない問題を修正。 JSON 出力時、ダブルクォートで囲まないように変更。 php_yaml-0.0.4.tgz コ…

QDBM のユーティリティ API : Cabin

便利そうな関数がいっぱいあったので、その中から cbxmlbreak & cbxmlattrs を使った単機能エクステンションの習作を。 XML (ていうか SGML) のテキストデータを配列に分割する関数です。DOM や正規表現でゴリゴリするよりシンプルな処理に。 普段は CodeGen…

コルーチンもどき by 継続

php_continuation-0.0.5.tgz 既存の関数をクロージャ化する関数を追加しました。 string co_enclose(callback $func[, array $env_vars[, int $flags]]) これは co_make_callable(co_create($func, $env_vars, $flags)) を短く書けるようにしたものです。 引…

CVS の python 拡張モジュールが良さげな件

PECL のサイトでは放置されてると思いきや、CVS のログを見ると先月末あたりから開発が再開されている模様。 Python クラス専用の zend_object_handlers 構造体のメンバを全て書き下ろして、マジックメソッド相当のことをよりネイティブに実装されています。…

マジックメソッドで遊んでみる

PHP

__call(), __get(), __toString() を使って実験。 _name = (string)$name; } public function __call($name, $args) { return new MagicChain(sprintf('%s::%s(%s)', $this->_name, $name, serialize($args))); } public function…