ZendFrameworkはCakePHPやEthna等と同じくフレームワークの一種ですが、特徴として各コンポーネントの独立性が高く、一部のモジュールだけを単体で使うことができます。
つうか本気で使用するにはmod_rewriteとかMVCの準備とかいろいろ必要でどうすりゃいいのかよくわからん。
まあモジュールをちょっと使ってみるだけならPear並に簡単です。
まず公式からダウンロードしてきたら適当な場所に解凍します。
で、その中のlibraryフォルダにインクルードパスを通せば後は好きなモジュールを使用することができます。
それどころかpearコマンドでもインストールでき、そうすると本気でPearと同等です。
# cd C:\xampp\php
# pear channel-discover zend.googlecode.com/svn
# pear install zend/zend
こんなかんじで実行するとC:\xampp\php\PEAR\Zendあたりに堂々とインストールされ、後はPearライブラリ呼ぶときと全く同じ使い方ができます。
まあ適当に、試しに簡単そうなZend_Dateを使ってみます。
zend_date1.php
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//Zend_Dateを使用するための初期設定
date_default_timezone_set('Asia/Tokyo');
//Zend_Date
require_once('Zend/Date.php');
$date = new Zend_Date();
//適当に使ってみる
print $date->get();
$date->set('13:00:00',Zend_Date::TIMES);
print $date->get();
|
Fatal error: Uncaught exception 'Zend_Date_Exception' with message 'Missing locale file 'C:\xampp\php\PEAR\Zend\Locale/Data/ja.xml' for 'ja' locale.' in C:\xampp\php\PEAR\Zend\Date.php:2136 Stack trace: #0 C:\xampp\php\PEAR\Zend\Date.php(989): Zend_Date->_calculate('set', '13:00:00', 'WW', NULL) #1 C:\xampp\htdocs\index.php(12): Zend_Date->set('13:00:00', 'WW') #2 {main} thrown in C:\xampp\php\PEAR\Zend\Date.php on line 2136
あれ?
C:\xampp\php\PEAR\Zend\Locale/Data/を見てみると、本来入っているべきja.xmlやja_JP.xmlなんかが一切存在しませんでした。
なぜだらう?
仕方ないのでこのフォルダだけ手動でコピペした。
zend_date2.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//Zend_Dateを使用するための初期設定
date_default_timezone_set('Asia/Tokyo');
//Zend_Date
require_once('Zend/Date.php');
$date = new Zend_Date();
//適当に使ってみる
print($date->get());
$date->set('11092210232008','mmMMHHddssyyyy');
print($date->get('yyyy年MM月dd日(E曜日) HH時mm分ss秒'));
$date->add('22:00:00',Zend_Date::TIMES);
print($date->get(Zend_Date::RFC_2822));
|
何が便利って入力値のフォーマットを指定できる!!
DBから取得した日時をstrtotime()に突っ込んだつもりが何故かVARCHAR型に変なフォーマットで入ってて理解できねーと言われた、とかいうような腐った設計でもこれで安心。
例にある'11092210232008'のような意味不明な文字列ですら、'2008年09月10日(水曜日) 22時11分23秒'と引数通りの解釈を行ってくれます。
また日付の足し引きや比較といった計算もadd()やsub()、isLater()等で自由に行うことができます。
http://framework.zend.com/manual/ja/zend.date.overview.html#id.date.basic.operations
計算の場合も第二引数で入力値の形式を指定することができるので、日時形式をいちいち分解してmktime()に突っ込んだり、使い方が微妙に不自由なDateTime::addを使用したりせずに済みます。
日時形式を設定、取得するために多数の定数が用意されており、決まった形式なら定数を使えます。
http://framework.zend.com/manual/ja/zend.date.constants.html#zend.date.constants.list
まあ、Zend_Date::DAYって書くより'dd'って書く方が早いような気もしないでもないですが。
いやあ、しかしZend_Date便利だね。
これが普及してくれれば現行の日付関数全部要らなくなるんだが。
注意点としては、西暦-99年~-01年の値を'yyyy'で取得しようとすると00-1とかいう形になってしまいます。
Zend_Date::YEARだときちんと-1になるんですがね。
古めの記事だと999年以前やZend_Date::YEARでもおかしかったみたいだけど、そこらへんは直ったみたい。
PR
トラックバック
トラックバックURL: