XCLコアでのclass_exists関数の使用について

29 views
Skip to first unread message

K. Ono

unread,
Feb 22, 2009, 11:53:07 PM2/22/09
to xcube-...@googlegroups.com
onokazuです。

XCLのコアでclass_exists関数が結構使われていますが、PHP5環境のために
2番目の引数をfalseにしてもらえないでしょうか。モジュール側で
__autoloadを定義している場合、class_existsの呼び出しの度にモジュール
側の__autoloadが呼ばれてしまって少し困っています。

コア側で__autoloadを定義することはないと思いますし、影響はほとんどない
のではと思います。PHP4とPHP5でクラスローディングの挙動が異なるのも
バグと言えなくもないですし。。

または、規定のファイルや関数が存在しない場合、クラスもないとみなす
とか。。こっちの方が変更は多くなると思いますが。

これに関連して、複数のモジュールで__autoloadが定義されていた場合、
ブロックやプリロードでバッティングしてしまうことも考えられますので、
逆にコア側で中身は空でも構わないので__autoloadを定義しておくのも良い
かもしれないですね。モジュール側で__autoloadが必要な場合には
spl_autoload_registerを使うということで。

K. Ono

unread,
Feb 23, 2009, 7:35:47 AM2/23/09
to xcube-...@googlegroups.com
onokazuです。

自己レスです。PHP4だとwarning出るだけかと思っていたら、返り値も
nullになってしまうんですね。そうなると単純に引数追加じゃ無理か。。
対応するにはコア側でclass_existsをラップした関数作るしかなさそうですね。


2009/2/23 K. Ono <ono...@gmail.com>:

Minahito

unread,
Feb 23, 2009, 7:13:43 PM2/23/09
to xcube-...@googlegroups.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をラップした関数作るしかな

のぶのぶ

unread,
Feb 23, 2009, 7:36:11 PM2/23/09
to xcube-...@googlegroups.com
のぶのぶです。

> 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です。
>>>

Minahito

unread,
Feb 24, 2009, 12:53:23 PM2/24/09
to xcube-...@googlegroups.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です。
>>>>

K. Ono

unread,
Feb 24, 2009, 9:54:47 PM2/24/09
to xcube-...@googlegroups.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です。
>>>>>

nao-pon

unread,
Mar 2, 2009, 8:25:55 AM3/2/09
to XOOPS Cube Developers Group Japan
nao-pon です。

class_exists() の第二引数の存在すら知りませんでしたので、これは、本当にびっくりしました。

HypCommonFunc, xpWiki はプリロードやブロックで読み込まれますので、早速対策をとりました。


On 2月25日, 午前11:54, "K. Ono" <onok...@gmail.com> wrote:
> onokazuです。
>
> 早速の対応ありがとうございます。
>
> あとはサードパーティモジュールでも__autoloadを想定していない場合には、
> この関数を使用してもらえるようになれば良いですね。
>
> 2009/2/25 Minahito <minah...@gmail.com>:
>
>
>
> > minahitoです。
> > Cマクロライクなものに関しては大域関数を許すというコード規約に従って、まずは XCube_Root を修正してコミットしました。
>
> > といっても畳込みが起こるわけではないので……
> > 今後、PHP4/5の吸収マクロが増えていくようならPHP4用定義ファイルとPHP5用定義ファイルの2つを用意して、 include
> > 時に読み替えるという方法も検討してみます。
>
> > Trunk 以外は trunk 側の作業が終わり次第マージさせます。逆のような気もしますが気にしない。;;
>
> > On 2009/02/24, at 9:36, のぶのぶ <nobun...@nobunobu.com> wrote:
>
> >> のぶのぶです。
>
> >>> class_exists() って、定義テーブルを見に行くだけだと思っていたので、PHP5の第2パラメータを見て驚いてしまいました。
>
> >> 小生も少し気になって調べてみましたが、この第2パラメータ及び、class_exists()の
> >> デフォルト動作については、いろいろなサイトで問題視されている記事を見かけますね。
>
> >> これへの対応については、__autoload側で行われている場合もあるようですが...
> >> XCLのように、モジュールのごった煮状態を許容している以上は、class_exists()の使用側で
> >> 対応する以外ないようですね
>
> >> 2009/02/24 9:13 Minahito <minah...@gmail.com>:
>
> >>> minahitoです。
> >>> class_exists() って、定義テーブルを見に行くだけだと思っていたので、PHP5の第2パラメータを見て驚いてしまいました。
>
> >>> ラッパーというか、マクロ的関数を追加して、コアの守備範囲を書き換えておきますね。
>
> >>> On 2009/02/23, at 21:35, "K. Ono" <onok...@gmail.com> wrote:
>
> >>>> onokazuです。
>
> >>>> 自己レスです。PHP4だとwarning出るだけかと思っていたら、返り値も
> >>>> nullになってしまうんですね。そうなると単純に引数追加じゃ無理か。。
> >>>> 対応するにはコア側でclass_existsをラップした関数作るしかなさそうですね。
>
> >>>> 2009/2/23 K. Ono <onok...@gmail.com>:

minahito

unread,
Mar 2, 2009, 11:25:58 AM3/2/09
to xcube-...@googlegroups.com
minahito です。
一応 trunk にあった class_exists は全部置き換えました。

折を見てブランチへマージしたいと思います。

> class_exists() の第二引数の存在すら知りませんでしたので、これは、本当にびっくりしました。

いや、ほんとそうです。(^^;

貴重な情報ありがとうございました > onokazu さん

2009/03/02 22:25 nao-pon <hyp...@gmail.com>:

--
minahito (mina...@gmail.com)

Reply all
Reply to author
Forward
0 new messages