XCLのコアでclass_exists関数が結構使われていますが、PHP5環境のために
2番目の引数をfalseにしてもらえないでしょうか。モジュール側で
__autoloadを定義している場合、class_existsの呼び出しの度にモジュール
側の__autoloadが呼ばれてしまって少し困っています。
コア側で__autoloadを定義することはないと思いますし、影響はほとんどない
のではと思います。PHP4とPHP5でクラスローディングの挙動が異なるのも
バグと言えなくもないですし。。
または、規定のファイルや関数が存在しない場合、クラスもないとみなす
とか。。こっちの方が変更は多くなると思いますが。
これに関連して、複数のモジュールで__autoloadが定義されていた場合、
ブロックやプリロードでバッティングしてしまうことも考えられますので、
逆にコア側で中身は空でも構わないので__autoloadを定義しておくのも良い
かもしれないですね。モジュール側で__autoloadが必要な場合には
spl_autoload_registerを使うということで。
自己レスです。PHP4だとwarning出るだけかと思っていたら、返り値も
nullになってしまうんですね。そうなると単純に引数追加じゃ無理か。。
対応するにはコア側でclass_existsをラップした関数作るしかなさそうですね。
2009/2/23 K. Ono <ono...@gmail.com>:
ラッパーというか、マクロ的関数を追加して、コアの守備範囲を書き換え
ておきますね。
On 2009/02/23, at 21:35, "K. Ono" <ono...@gmail.com> wrote:
>
> onokazuです。
>
> 自己レスです。PHP4だとwarning出るだけかと思っていた
> ら、返り値も
> nullになってしまうんですね。そうなると単純に引数追加じゃ無理か
> 。。
> 対応するにはコア側でclass_existsをラップした関数作るしかな
> class_exists() って、定義テーブルを見に行くだけだと思っていたので、PHP5の第2パラメータを見て驚いてしまいました。
小生も少し気になって調べてみましたが、この第2パラメータ及び、class_exists()の
デフォルト動作については、いろいろなサイトで問題視されている記事を見かけますね。
これへの対応については、__autoload側で行われている場合もあるようですが...
XCLのように、モジュールのごった煮状態を許容している以上は、class_exists()の使用側で
対応する以外ないようですね
2009/02/24 9:13 Minahito <mina...@gmail.com>:
>
> minahitoです。
> class_exists() って、定義テーブルを見に行くだけだと思っていたので、PHP5の第2パラメータを見て驚いてしまいました。
>
> ラッパーというか、マクロ的関数を追加して、コアの守備範囲を書き換えておきますね。
>
> On 2009/02/23, at 21:35, "K. Ono" <ono...@gmail.com> wrote:
>
>>
>> onokazuです。
>>
>> 自己レスです。PHP4だとwarning出るだけかと思っていたら、返り値も
>> nullになってしまうんですね。そうなると単純に引数追加じゃ無理か。。
>> 対応するにはコア側でclass_existsをラップした関数作るしかなさそうですね。
>>
>>
>> 2009/2/23 K. Ono <ono...@gmail.com>:
>>>
>>> onokazuです。
>>>
といっても畳込みが起こるわけではないので……
今後、PHP4/5の吸収マクロが増えていくようならPHP4用定義
ファイルとPHP5用定義ファイルの2つを用意して、 include
時に読み替えるという方法も検討してみます。
Trunk 以外は trunk 側の作業が終わり次第マージさせます。逆の
ような気もしますが気にしない。;;
On 2009/02/24, at 9:36, のぶのぶ <nobu...@nobunobu.com> wrote:
>
> のぶのぶです。
>
>> class_exists() って、定義テーブルを見に行くだけだと思っていたの
>> で、PHP5の第2パラメータを見て驚いてしまいました。
>
> 小生も少し気になって調べてみましたが、この第2パラメータ及
> び、class_exists()の
> デフォルト動作については、いろいろなサイトで問題視されている記事
> を見かけますね。
>
> これへの対応については、__autoload側で行われている場合もあ
> るようですが...
> XCLのように、モジュールのごった煮状態を許容している以上
> は、class_exists()の使用側で
> 対応する以外ないようですね
>
> 2009/02/24 9:13 Minahito <mina...@gmail.com>:
>>
>> minahitoです。
>> class_exists() って、定義テーブルを見に行くだけだと思っていたの
>> で、PHP5の第2パラメータを見て驚いてしまいました。
>>
>> ラッパーというか、マクロ的関数を追加して、コアの守備範囲を書き
>> 換えておきますね。
>>
>> On 2009/02/23, at 21:35, "K. Ono" <ono...@gmail.com> wrote:
>>
>>>
>>> onokazuです。
>>>
>>> 自己レスです。PHP4だとwarning出るだけかと思ってい
>>> たら、返り値も
>>> nullになってしまうんですね。そうなると単純に引数追加じゃ無
>>> 理か。。
>>> 対応するにはコア側でclass_existsをラップした関数作るしか
>>> なさそうですね。
>>>
>>>
>>> 2009/2/23 K. Ono <ono...@gmail.com>:
>>>>
>>>> onokazuです。
>>>>
早速の対応ありがとうございます。
あとはサードパーティモジュールでも__autoloadを想定していない場合には、
この関数を使用してもらえるようになれば良いですね。
2009/2/25 Minahito <mina...@gmail.com>:
>
> minahitoです。
> Cマクロライクなものに関しては大域関数を許すというコード規約に従って、まずは XCube_Root を修正してコミットしました。
>
> といっても畳込みが起こるわけではないので……
> 今後、PHP4/5の吸収マクロが増えていくようならPHP4用定義ファイルとPHP5用定義ファイルの2つを用意して、 include
> 時に読み替えるという方法も検討してみます。
>
> Trunk 以外は trunk 側の作業が終わり次第マージさせます。逆のような気もしますが気にしない。;;
>
> On 2009/02/24, at 9:36, のぶのぶ <nobu...@nobunobu.com> wrote:
>
>>
>> のぶのぶです。
>>
>>> class_exists() って、定義テーブルを見に行くだけだと思っていたので、PHP5の第2パラメータを見て驚いてしまいました。
>>
>> 小生も少し気になって調べてみましたが、この第2パラメータ及び、class_exists()の
>> デフォルト動作については、いろいろなサイトで問題視されている記事を見かけますね。
>>
>> これへの対応については、__autoload側で行われている場合もあるようですが...
>> XCLのように、モジュールのごった煮状態を許容している以上は、class_exists()の使用側で
>> 対応する以外ないようですね
>>
>> 2009/02/24 9:13 Minahito <mina...@gmail.com>:
>>>
>>> minahitoです。
>>> class_exists() って、定義テーブルを見に行くだけだと思っていたので、PHP5の第2パラメータを見て驚いてしまいました。
>>>
>>> ラッパーというか、マクロ的関数を追加して、コアの守備範囲を書き換えておきますね。
>>>
>>> On 2009/02/23, at 21:35, "K. Ono" <ono...@gmail.com> wrote:
>>>
>>>>
>>>> onokazuです。
>>>>
>>>> 自己レスです。PHP4だとwarning出るだけかと思っていたら、返り値も
>>>> nullになってしまうんですね。そうなると単純に引数追加じゃ無理か。。
>>>> 対応するにはコア側でclass_existsをラップした関数作るしかなさそうですね。
>>>>
>>>>
>>>> 2009/2/23 K. Ono <ono...@gmail.com>:
>>>>>
>>>>> onokazuです。
>>>>>
折を見てブランチへマージしたいと思います。
> class_exists() の第二引数の存在すら知りませんでしたので、これは、本当にびっくりしました。
いや、ほんとそうです。(^^;
貴重な情報ありがとうございました > onokazu さん
2009/03/02 22:25 nao-pon <hyp...@gmail.com>:
--
minahito (mina...@gmail.com)