Có đáng để kiểm tra nếu class_exists khi phát triển plugin và làm thế nào để làm điều đó không?


8

Tôi đang học phát triển plugin WordPress bằng cách sử dụng phương pháp OOP. Trong hầu hết các tài nguyên trước khi khai báo một lớp thường có một kiểm tra nếu lớp tồn tại class_exists().

Đó là một cách tiếp cận tốt để kiểm tra điều này hoặc nó có thể được bỏ qua?

Ngoài ra, tôi đã tự hỏi liệu đó có phải là một cách tiếp cận tốt để kiểm tra trong một khối nếu không có lớp nào của plugin tồn tại. Ngay cả khi một lớp đã tồn tại, toàn bộ plugin không thể hoạt động chính xác vì nó không thể khai báo lại một lớp. Vì vậy, thay vì class_exists()thông qua mã, tôi đã tự hỏi liệu có tốt hơn khi có nó trong một khối khi kích hoạt một plugin hay không, đại loại như:

if ( class_exists( 'Class_Name_One' )
|| class_exists( 'Class_Name_Two' )
|| class_exists( 'Class_Name_Three' )
|| class_exists( 'Class_Name_Four' ) ) {

    exit;

}

Bất kỳ lời khuyên và thông tin phản hồi được đánh giá cao.

EDIT Nếu có xung đột với một plugin khác khai báo cùng tên lớp, tôi muốn hủy kích hoạt plugin của mình và hiển thị thông báo quản trị viên.

Câu trả lời:


5

Sử dụng trình tải tự động và để PHP giải quyết vấn đề đó cho bạn. Sau đó, chỉ có một lớp sẽ được tải và bạn không phải lo lắng về việc khai báo gấp đôi.

Thí dụ

Tôi có một plugin (chưa hoàn thành) Bài đăng Ghi chú với cấu trúc tệp sau:

- plugin.php
- php/
   - Nonce_Validator.php
   - Save_Post_Request_Validator.php
   - Textarea.php
   -  and more

Đây là một plugin rất đơn giản, vì vậy tất cả các tệp sử dụng cùng một không gian tên Wpkrauts. Trong plugin.php, tôi đăng ký một thói quen tải tự động đơn giản:

spl_autoload_register( function( $name ) {

    $name = ltrim( $name, '\\' );

    if ( 'Wpkrauts' !== strtok( $name, '\\' ) )
        return;

    $file = strtok( '.' );

    $path = __DIR__ . "/php/$file.php";

    if ( file_exists( $path ) )
        require $path;
});

// Now start.
is_admin() && new Post_Notes( 'wpkrauts_post_notes' );

Bạn có thể làm tương tự mà không cần sử dụng các không gian tên (không được khuyến nghị, ngoại trừ khi bạn phải hỗ trợ các phiên bản PHP không an toàn như 5.2).

Trong PHP 5.2, thư viện SPL có thể bị tắt, nhưng đó không bao giờ là vấn đề trong các plugin tôi biết. Công ty chúng tôi phân phối các plugin như BackWPup với hơn một triệu lượt tải xuống và không bao giờ có một sự tuân thủ nào về điều đó.

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.