Tại sao WordPress có chức năng riêng tư?


7

Lưu ý: Tôi đang nói về _wp_get_current_user();không wp_get_current_user().

Nếu bạn kiểm tra chức năng, _wp_get_current_user();bạn có thể thấy tuyên bố sau:

Quyền truy cập của chức năng này được đánh dấu là riêng tư. Điều này có nghĩa là nó không dành cho các nhà phát triển plugin hoặc chủ đề sử dụng, chỉ trong các chức năng cốt lõi khác. Nó được liệt kê ở đây cho đầy đủ. Sử dụng wp_get_cản_user () thay thế.

Tại sao WordPress có các loại chức năng riêng tư này? Tại sao WordPress không cho phép sử dụng các loại chức năng này cho plugin WordPress hoặc nhà phát triển chủ đề?


1
Điều này ít quan trọng hơn trong một ngôn ngữ như PHP hoặc dự án nguồn mở nơi bạn có thể xem mã cho các hàm "riêng tư".
wtmwrer

1
tình cờ là câu hỏi tuyệt vời @Ranuka. Tôi đã nhấp vào upwote 101 lần nhưng nó chỉ đăng ký một upwote duy nhất. :(
prosti

Câu trả lời:


18

Đó là một thực tế khá bình thường đối với mã không phải là một phần của API công khai.

Nhưng phần lớn mã WP là cổ xưa và thủ tục. Không có cách kỹ thuật để thực hiện một chức năng riêng tư.

Đây là riêng tư về mặt ngữ nghĩa , đó là WP không muốn bạn sử dụng chúng, nhưng nó thực sự không thể cấm bạn. Có một lịch sử lâu dài về các API WP "riêng tư" đang được sử dụng tích cực trong thực tế bởi các tiện ích mở rộng.

Các lý do để tuyên bố một cái gì đó riêng tư khác nhau tùy theo từng trường hợp. Trong trường hợp cụ thể này, bạn nêu ra lý do dường như là phiên bản "công khai" có thể cắm được, do đó, việc chuyển đổi sang phiên bản "riêng tư" cho phép bản gốc được thay thế dễ dàng hơn / với ít vấn đề hơn.


2
Về bản chất, họ đang nói "những thứ này có thể thay đổi hoặc biến mất mà không cần cảnh báo, đừng đi tùy thuộc vào chúng".
ceejayoz

6

Nói một cách đơn giản, các nhà phát triển sẽ chọn biến các chức năng nội bộ đó thành 'riêng tư' vì họ không muốn phải cung cấp hỗ trợ công khai cho họ. Ví dụ: họ không đảm bảo rằng bất kỳ đối số chức năng nào sẽ được giữ nhất quán trong vị trí hoặc thậm chí tồn tại từ cập nhật đến cập nhật.

Không phải là điều này thực sự ngăn cản nhiều nhà phát triển sử dụng các chức năng 'riêng tư' ...


như tuyên bố cuối cùng :)
madalinivascu

3

Ban đầu nó không hoàn toàn rõ ràng với tôi vì vậy tôi cần kiểm tra sâu hơn. Nếu bạn lấy ví dụ là wp-includes/user.phptệp tuyệt vời, bạn sẽ không tìm thấy một định nghĩa lớp PHP nào trong đó.

File: /wp-includes/user.php
2452:  * @since 4.5.0
2453:  * @access private
2454:  *
2455:  * @see wp_get_current_user()
2456:  * @global WP_User $current_user Checks if the current user is set.
2457:  *
2458:  * @return WP_User Current WP_User instance.
2459:  */
2460: function _wp_get_current_user() {

Tuy nhiên, bạn sẽ tìm thấy _wp_get_current_user()chức năng mà chúng ta quan tâm. Những gì bạn thấy @access privatechỉ là một mẹo cho trình tạo tài liệu PHP.

Điều này cũng chỉ ra rằng hàm này trong tương lai có thể trở thành hàm riêng bên trong một lớp.

Khái niệm về một hàm riêng chỉ tồn tại khi bạn có các lớp PHP và điều này là với PHP 5 trở lên (kể từ đó PHP là Hướng đối tượng). Khái niệm này được gọi là đóng gói.

WordPress dần dần cải thiện mã PHP bằng cách giới thiệu các lớp, nhưng quá trình sẽ không xảy ra trong đêm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.