Hatena::Grouparaistudy

czk-htnの日記

2010-01-17

[][] OSX Leopard で Ethna-2.5.0 07:09

PHPのバージョンは5.2.11。

PEARのインストール

インストール先は ~/Documents/lib/pear にした。/usr/lib に入れるのに抵抗があったので。

% curl http://pear.php.net/go-pear | php
% export PATH=~/Documents/lib/pear/bin;$PATH

ApacheでPHP5を有効にする

/etc に php.ini を作成する。include_path にPEARのパスを追加する。

% sudo cp /etc/php.ini.default /etc/php.ini
% sudo vi /etc/php.ini
- include_path = ".:/php/includes:"
+ include_path = ".:/php/includes:/Users/xxx/Documents/lib/pear/PEAR"

Apacheの設定ファイルを編集してPHP5を有効にする。

% sudo vi /etc/apache2/httpd.conf
- #LoadModule php5_module        libexec/apache2/libphp5.so
+ LoadModule php5_module        libexec/apache2/libphp5.so
% sudo /usr/sbin/apachectl graceful
% tail /var/log/apache2/error_log
[Mon Jan 18 00:11:43 2010] [notice] Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.7l DAV/2 PHP/5.2.11 SVN/1.4.4 configured -- resuming normal operations

Ethnaをインストールする

アーカイブはいったん手元にダウンロードしてからインストールしてみた。職場だとプロキシのためネットからの直接インストールができなかったりするので。

% pear channel-discover pear.ethna.jp
Channel "pear.ethna.jp" is already initialized
% pear install ~/Downloads/Ethna-2.5.0.tgz
WARNING: "pear/DB" is deprecated in favor of "pear/MDB2"
Did not download optional dependencies: pear/DB, ethna/Smarty, ethna/simpletest, use --alldeps to download automatically
ethna/Ethna can optionally use package "pear/DB"
ethna/Ethna can optionally use package "ethna/Smarty"
ethna/Ethna can optionally use package "ethna/simpletest"install ok: channel://pear.ethna.jp/Ethna-2.5.0

Smartyをインストールする

Ethnaをアーカイブからインストールした場合はSmartyは入らない。

  1. PHP Template Engine | Smartyからファイルをダウンロード(2.6.26)。
  2. 展開して libs ディレクトリを PEAR の下にコピーする。
% tar xzf ~/Downloads/Smarty-2.6.26.tar.gz
% cd Smarty-2.6.26/  
% cp -Rp libs/ ~/Documents/lib/pear/PEAR/Smarty          

[] PHP5のアクセサって分かりづらくない? 07:09

アクセサ(__get、__set)。PerlでいうAUTOLOAD、Rubyでいうmethod_missing。

#!/usr/bin/php
<?php
class Main {
    function __set($name, $value) {
        echo "__set($name, $value)\n";
        $this->$name = $value;
    }
}

$obj = new Main;
$obj->a = "a1";
var_dump($obj->a);
$obj->a = "a2";
var_dump($obj->a);
$obj->b = "b1";
var_dump($obj->a);
?>

↓実行結果。"a2"を代入した時には__setは呼ばれていない。なぜなら"a1"代入後にプロパティが存在することになるため($this->$name)。

__set(a, a1)
string(2) "a1"
string(2) "a2"
__set(b, b1)
string(2) "a2"

[] PHPについて 07:10

Leopardに入ってるPHPバージョン

仕事で数年ぶりにPHPを使うことになりそうだ。PHPは2.0の頃から使い始めてPHP3が全盛期、PHP4を2年ほど仕事で使った後ほとんど触っていない。PHP5がリリースされているので新ためて復習しておく。

% php --version                                     ~/Desktop
PHP 5.2.11 (cli) (built: Sep 28 2009 16:48:57) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

5.2系は 5.2.12 が最新バージョン。

PHP4 と PHP5

トピックス(ベータリリース目前!? PHP5の新機能(1/2)− @IT

  • オブジェクトは「参照渡し」になる
  • クラスのプロパティおよびメソッドにアクセス制限を導入(public, private, protected)
  • abstractの導入
  • interfaceの導入
  • final
  • 名前空間(namespaces)(>=5.3)
  • クラス内定数(const)
  • 統一コンストラクタ、デストラクタ(__construct、__destruct)
  • アクセサ(__set、__get)
  • 例外処理(try, throw, catch) ※finallyがない!!

PHP5はJavaに似てきたね。ところで例外処理にfinallyがなくてどうやってリソース解放させるんだろう?

公式マニュアル(PHP: PHP 4 から PHP 5.0.x への移行 - Manual )を読む限り、普段プログラムを書いていて文法的なところでバージョンの違いを意識しなければならないケースはなさそうだ。PHP4→5だけでなく、5.0→5.1→5.2→5.3それぞれの互換性も確認すべき。

必読→ PHP: PHP 5.3.x で推奨されない機能 - Manual


PHP5を利用するときには、E_STRICTをphp.iniに指定すべき(PHP: エラー報告 - Manual )。だけど、PEARを使っていると(PHP4との互角性確保のため)大量のエラーメッセージが出力されてしまう。鬱陶しいなら E_ALL だけにする。

こっちも気になる。いまだにOracle9iが現役なので。

Oracle 拡張モジュール を Windows で使用するには、最低でも Oracle のバージョン 10 が必要となりました。

http://www.php.net/manual/ja/migration52.incompatible.php

PEAR

PEARは「ペア」。PHPのライブラリ群。PerlでいうCPAN。なんかやりたいことがあれば、既存のライブラリがないか探してみた方が良い。

PEAR Packages

Pyrus

Pyrusは PHP5.3+ で動くPEARのインストーラ。Pyrus: Improvements from the PEAR Installerによると、既存のPEARインストーラよりも

  • 使うのが簡単 ... pyrus.phar 1ファイルだけで構成されている
  • セキュア ... PEARにある既知のセキュリティ脆弱性が見直されている
  • 小さい ... 5.3+ではXMLやアーカイブ機能がビルトインになったため
  • 速い ... 5.3だから
  • 堅牢 ... レジストリ情報をsqlite3使うので
  • フレキシブル ... 評価用パッケージのインストール先を変更でき、以前のバージョンへの切り戻しも簡単
  • テストされている ... Unitテスト と カバレッジテストをバッチリやってる

5.3+が採用できれば検討。

Webフレームワーク

JavaでいうStrutsのような、まぁ古臭くとも小さくて分かりやすいデファクトスタンダード的フレームワークがあればいいんだが。

なるべくMVCを分けたいけど、数ページで参照オンリーならHTMLファイルと一緒に埋め込んだほうがわかりやすいかも。

Nothing found for Slide 1011

  • ZendFramework() ... これが公式?
  • Ethna(2.3 or 2.5) ... GREEのやつ
  • CakePHP ... Rails
  • Symfony ... フルスタック

Strutsに作りが似てるって点でEthnaがいいかな。


DBとの接続

PEAR::DBが基本らしい。でも、これから使うなら PEAR::MDB2 にしろって公式にあるね(Error 404)。PEAR::DB も PEAR::MDB2 もJavaでいうJDBCみたいなものか。

PHP5.1以降なら PDO(PHP Data Object)って選択肢もあるみたいだけど、そうなるとPEAR::MDB2を使うメリットは? 他のPEARライブラリとの連携という意味でMDB2が良いらしいけど、速度の点ではPDOが良いようだ(403 Forbidden)。Preparedステートメントは必須。

既存テーブルがあるのでO/Rマッパーは不要。SQL直書き最強。Javaだと commons-dbutils がお気に入り(プロパティファイルからのSQLロード/row → bean変換)なので、それっぽいのがあれば。


追記

[Perl][PHP][SQL]: quoteメソッドの数値データ対応を検証する - 徳丸浩の日記(2009-10-19) でいうとquoteメソッドの数値データの取り扱いはMDB2が合格。

テスト

phpunit

xdebug

トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100117