2013-06-18 16 views
9

này hoạt động:Có hợp lệ để sử dụng gọi lại tĩnh riêng tư trong PHP không?

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) 

Nhưng, PHP docs luôn luôn sử dụng public callbacks.

Thực tế là các cuộc gọi lại có thể là private không được ghi chép đầy đủ hoặc làm cho chúng private có thể dẫn đến sự cố?

+2

bạn gọi phương pháp riêng tư từ bên trong lớp để cho phép của nó phải không? – DevZer0

+0

@ DevZer0: nhưng nó không phải là phương pháp bên trong lớp gọi nó; đó là 'usort'. – Ashe

Trả lời

0

Rất lạ. Tôi chơi xung quanh với nó một chút ngăn xếp dấu vết ngăn xếp bên trong gọi lại. Có thể đó là các cuộc gọi tĩnh đã cho phép trò chơi phát rộng với khả năng hiển thị, nhưng:

Điều này cũng hoạt động và ngăn xếp cuộc gọi trông như vậy. Đó là PHP cho bạn. Tất nhiên, tôi sẽ từ bỏ toàn bộ mớ hỗn độn và chỉ sử dụng một đóng cửa ngay bây giờ.

0

usort và các chức năng khác như array_map thực sự là nhận thức ngữ cảnh; nếu bạn sử dụng một cuộc gọi lại không công khai trong một lớp, nó hoạt động tốt. Nó không giống như phương thức đó đang được gọi từ bên ngoài lớp, nó chỉ được gọi gián tiếp thông qua một cuộc gọi lại, và đó là một trường hợp sử dụng được hỗ trợ.

+0

Bạn có thể hiển thị tài liệu về hành vi này không? Tôi đã cố gắng tìm kiếm, nhưng không thể tìm thấy mô tả trực tiếp về nó. – sectus

Các vấn đề liên quan