2

これはおそらく明白な質問ですが、私は確信したいと思います。

「事前定義されたインターフェース」がPHPにどのバージョンで登場したかを調べようとしています。ドキュメントに従ってSPLインターフェイスが追加されたときのように、私の仮定は5.0.0です。

さらに、これらを構成または再コンパイルによって無効にすることはできますか、それともバージョンチェックがそれらの存在を満たしていると安全に想定できますか?なぜそれらはSPLから分離されているのでしょうか。差別化要因は、SPLをオフにすることはできるのに、これらをオフにすることはできないということだけですか。(少なくとも5.3.0より前)

4

3 に答える 3

1

インターフェイスがいつ追加されたのか、または差別化要因が何であるかについてのあなたの仮定よりも良い答えはありません(PHP CVSを5分間掘り下げても、それは生成されませんでした)。

ただし、バージョンチェックに依存する代わりに、それらの存在をチェックする防弾方法がありますinterface_existsclass_existsPHPバージョン5.0.0および5.0.1の場合は、代わりに行う必要があります。

それで:

function interfaces_defined() {
    // Most likely case first
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
        return true;
    }
    else if (version_compare(PHP_VERSION, '5.0.0', '<')) {
        return false;
    }
    else if (version_compare(PHP_VERSION, '5.0.1', '<=')) {
        return class_exists('Iterator');
    }
    else {
        return interface_exists('Iterator');
    }
}

きれいではありませんが、間違いなくすべての拠点をカバーしています。

于 2011-04-05T09:10:46.897 に答える
1

各SPLインターフェースのバージョンは、ここで確認できます。5.0以降に追加されたものもあります。また、PHP 5.3.0以降のマニュアルによると、 SPLを無効にすることはできません。

于 2011-04-05T09:19:45.493 に答える
1

現在、このマニュアルには、各インターフェイスに属するメソッドのバージョン情報のみが表示されています。このバージョン情報は、ページ上部のメソッドプロトタイプ(info)の上にあります。

したがって、メソッドの説明をクリックして、そこにリストされているものを確認してください。

これらを構成または再コンパイルによって無効にすることはできますか、それともバージョンチェックがそれらの存在を満たしていると安全に想定できますか?なぜそれらはSPLから分離されているのでしょうか。差別化要因は、SPLをオフにすることはできるのに、これらをオフにすることはできないということだけですか。(少なくとも5.3.0より前)

これらのインターフェイスはSPL拡張機能の一部ではなく、有効または無効にすることはできません。それらはZendエンジンに実装する必要がありました。SPLである拡張機能で彼ら​​が行うことを行うことは不可能です。


その価値については、少し前に、クラス(したがってインターフェイス)の概要/概要ページでバージョン情報を利用できるようにすることについて、機能リクエスト(#49927 )を開きました。それが存在し、役立つことを私に思い出させてくれてありがとう!

于 2011-04-06T20:10:12.950 に答える