2013-06-18 8 views
9

これは動作します:PHPでプライベートスタティックコールバックを使用するのに有効ですか?

class MyClass { 
    private static $data = array('banana', 'cherry', 'apple'); 

    private static function sort_by_text($first, $second) { 
    return strcasecmp($first, $second); 
    } 

    public static function sorted_data() { 
    usort(self::$data, array(__CLASS__, 'sort_by_text')); 
    return self::$data; 
    } 
} 

print_r(MyClass::sorted_data()); 
// Array ([0] => apple [1] => banana [2] => cherry) 

しかし、PHP docs常にpublicコールバックを使用します。

コールバックがprivateになっていることがよくありますか、それともprivateにすると問題が発生する可能性がありますか?

+2

あなたが呼び出しますそれは許可されていないので、クラス内からプライベートメソッド? – DevZer0

+0

@ DevZer0:それを呼び出すクラスの中のメソッドではありません。それは 'usort'です。 – Ashe

答えて

0

非常に奇妙です。私はそれを少しスタックトレースをコールバックの中に落として遊んだ。

​​

これはあまりにも動作し、それが必要として、コールスタックが見えます:多分それは可視性と緩い遊ぶせた静的呼び出しだったが、思いました。それはあなたのためのPHPです。もちろん、私はすべての混乱を忘れて、ちょうど閉鎖を使用します。

0

usortarray_mapのような関数は、実際にはコンテキストを認識しています。あなたがクラス内で非公開のコールバックを使用する場合、それは正常に動作します。そのメソッドがクラスの外部から呼び出されているようなものではなく、コールバックを介して間接的に呼び出されているだけで、サポートされている使用例です。

+0

この現象の文書を表示できますか?私は検索しようとしましたが、直接の説明は見つかりませんでした。 – sectus

関連する問題