2009年2月17日火曜日

Zend FrameworkのZend_Dateで詰まった><

Zend_Frameworkの1.5.3で動かしていた物を1.7.4にあげてみようかと思ってやってみました。

で、早速詰まったorz
メッセージを見ると
Locale (Object id #1367) is a unknown locale
そんなロケール知らないとか言われてます。 いや、何もしてないし、、、
そんな訳で調べてみると、どうやらZend_Dateのインスタンスを作成する時に、引数に日付の文字列("2008-12-31 00:00:00"とか)を渡した
時に発生している模様。私が試した環境では前述のようなコードを実装すると出ていましたが、他のパターンも 十分発生しうるかと。
なんでだろうかと探ってみた結果、自身でロケール属性を持っているのですが、 これが正しく設定出来てなく、
この不正なロケール属性でインスタンス生成が失敗しているのが原因のようです。

で、何故ロケール属性が正しく設定出来ていないかと言うと、Zend_Dateのコン
ストラクタでsetLocaleというメソッド
を実行しており、そこでZend_Localeクラスを文字列に変換しています。
Zend_Date
public function setLocale($locale = null)
{
  if (!Zend_Locale::isLocale($locale, true, false)) {
    if (!Zend_Locale::isLocale($locale, false, false)) {
      require_once 'Zend/Date/Exception.php';
      throw new Zend_Date_Exception("Given locale ({$locale}) does not exist", (string) $locale);
    }

    $locale = new Zend_Locale($locale);
  }

  $this->_locale = (string) $locale;
  return $this;
}

ここで期待された値はLocaleを示す文字列(jaとか)なのですが、
"Object id #1367"となってしまいました。
この差異はPHPのバージョンの違い、PHP5.2を境にして、出るようです。私の環境がPHP5.1.6で出ちゃいました><
Zend_Dateではマジックメソッドを使っおうとしていていますが、string型へのキャストはPHP5.2からのサポートなので 期待した結果が得られていません。

参考:href="http://php.benscom.com/manual/ja/language.oop5.magic.php">ttp://php.benscom.com/manual/ja/language.oop5.magic.php
__toString メソッドにより、 クラスが文字列に変換される際の動作を決めるこ
とができます。
・
・
・
注意が必要なのは、PHP 5.2.0 より前では、__toString メソッドは echo() ま
たは print(). と直接結合された場合のみコールされていたということです。

補足ですが、ZF1.7.4は最低限なシステム構成としてはどうやらPHP5.1.4、推奨はPHP5.2.4だそうです。 ここら辺の解釈は様々ありそうですが、とりあえずPHP5.2.0以前で動かすには一手間要るようです。
ちなみにブートファイルで
Zend_Registry::set('Zend_Locale','ja');

とやる事でも一応回避は出来ました。何故かZend_Registryを使ってて。。。どうなんだろう(^^;
そして気付いてみたら2/16に1.7.5がリリースされてました。 ちなみに同じようにはなりました。

2009年2月15日日曜日

梅@大宮公園

まだ早いと言われますが、春ですね。
今シーズンはあんまり寒くない気がします。

例年並かどうかわかりませんが、2月中ごろから梅が身頃のようで、来週2月22日ぐらいから各地で梅祭りとかがあるらしいです。
そこで、少し先取りして大宮公園で梅を見てきました。満開とまだ咲いてない木とありますが、これはキレイに咲いてました。


桜の花見は人が半端無いですが、今は静かに鮮やかな紅を堪能できます。
梅も良いやね。もっとガンガン咲いてるとこもみてみたくなってきます。


2009年2月8日日曜日

自転車屋さん

とある縁で自転車回収業のコーポレートサイトを作りました。
内容は至ってシンプルなHTMLです。特別な事は何にもやってません(笑

Webのデザインとかはあんまり得意じゃないんですが、それなりに纏まった見た目になってると思われ。デザインセンスが自分も少しあがったんじゃないかと。

ちなみにココは自転車を直したり中古販売もしてるんですが、普通のママチャリが3000円ぐらいで買えちゃったりします。あと、中古だからかサポートもしてくれるらしい。
いや、とにかく安いです。