[s2container-php5:92] Re: s2dao.php5 +コメントアノテーションでMethod XXXX does not exist

SHIMOOKA Hideyuki [E-MAIL ADDRESS DELETED]
2007年 4月 28日 (土) 14:58:25 JST


下岡です。

---- kloveさん曰く...

>klove です。
>はじめまして。

こんにちは。はじめまして :-)


>SHIMOOKA Hideyuki さんは書きました:
>> s2dao.php5のexamplesにあるコメントアノテーションのサンプルを
>> 試していますが、
>>  ReflectionException: Method content does not exist in ...
>> となってしまいます。
(snip)
>s2dao.php5-1.1.2/examples/s2dao_comment/example.inc.php に
>S2CONTAINER_ANNOTATION_READER 定数を定義すると cd_select1.php
>が実行できることを確認しました。
>
>example.inc.php
>-------------------------------------------
>・・・
>define('S2DAO_PHP5_USE_COMMENT', true);
>define('S2CONTAINER_ANNOTATION_READER','S2DaoAnnotationReader');
>・・・
>-------------------------------------------

ありがとうございます。
こちらでも上記で動作することを確認しました。


>また、s2daoをバージョン1.1.1では問題なく実行できました。

これも確認しました。正しく動作しています。

とりあえず、定数を追加することで進めていこうと思います。


>バージョン1.1.2での変更が関係しているようです。

ちょっとだけソースを追ってみましたが、1.1.1と1.1.2のdiffを
取ってみると

----ここから

$ diff s2dao.php5-1.1.1/S2Dao/s2dao.core.classes.php \
       S2Dao.PHP5-1.1.2/S2Dao/s2dao.core.classes.php
750,751c750,751
<             if (strcasecmp($propName, $timestampPropertyName) == 0) {
<                 $this->setTimestamp(time());
---
>             if (strcasecmp($propName, $timestampPropertyName) === 0) {
>                 $this->setTimestamp(date('Y-m-d H:i:s', time()));
753c753
<             } else if (strcmp($propName, $versionNoPropertyName) == 0) {
---
>             } else if (strcmp($propName, $versionNoPropertyName) === 0) {
1158c1158
<         if(class_exists('S2Container_AnnotationContainer')){
---
>         if(class_exists('S2Container_AnnotationContainer', false)){

----ここまで

S2Dao_AbstractAnnotationReader#setCommentAnnotationHandler
にあるclass_existsの引数にfalse(autoloadしない)が追加されて
いたので、trueもしくは引数を削除すると期待する動作をしました。

#他への影響範囲は分かりませんが。。。


-- 
SHIMOOKA Hideyuki


S2Container-PHP5 メーリングリストの案内