Tại sao sử dụng nếu function_exists?


30

Tôi nhận thấy rất nhiều nhà phát triển chủ đề WordPress sẽ sử dụng điều này trong Hàm.php

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Đối với tôi, tôi luôn sử dụng add_action cho mọi chức năng tôi đang sử dụng trong hàm.php

Vì vậy, ở trên sẽ được viết là:

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Tôi có hai câu hỏi:

  1. Tại sao sử dụng câu lệnh if trong phương thức đầu tiên?

  2. Cái nào là cách chính xác?

Câu trả lời:


35

Kiểm tra xem liệu các hàm WordPress tích hợp có tồn tại hay không trước khi gọi chúng là để tương thích ngược mà IMHO không cần thiết.

Vì vậy, nếu bạn thấy if ( function_exists( 'register_nav_menus' ) )tác giả chủ đề đang hỗ trợ các phiên bản sớm hơn 3.0.

Bạn vẫn thỉnh thoảng thấy if ( function_exists( 'dynamic_sidebar' ) )Tại sao? Tôi không thể nói với bạn vì Dynamic_sidebar đã được giới thiệu trong 2.2.

Một lý do khác để sử dụng nó là làm cho chủ đề hoặc plugin của bạn có thể cắm được. Một chức năng có thể cắm là một chức năng có thể được ghi đè trong một chủ đề con hoặc một plugin khác.

Điều này được thực hiện trên định nghĩa không phải là cuộc gọi và bạn sử dụng! toán tử để đảm bảo nó không tồn tại trước khi bạn xác định nó.

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

Khi điều này được thực hiện, một chủ đề con hoặc plugin khác có thể ghi đè chức năng đó bằng chính nó.


9

Các function_existschức năng không phải là một cách khác để nạp chức năng như add_actionnó cho kiểm tra mã của bạn để thấy rằng không có chức năng khác với tên tương tự vì vậy nó sẽ không phá vỡ mã của bạn. Từ php.net:

Kiểm tra danh sách các hàm được xác định, cả hàm tích hợp (bên trong) và do người dùng định nghĩa, cho function_name.

Nếu bạn có cùng chức năng hai lần trong mã của mình thì nó sẽ bị hỏng, đó là lý do tại sao bạn tiền tố Chức năng của bạn với một cái gì đó khác với wp_.

Đọc thêm: http://php.net/manual/en/feft.feft-exists.php


0

bạn có thể sử dụng http://php.net/feft_exists

if(function_exists('my_function')){
   // my_function is defined
}

HOẶC nếu bạn muốn xem tất cả các chức năng có sẵn, vì vậy bạn cũng in tất cả,

echo "<pre>"; print_r(get_defined_functions());

in trên trang và bạn có thể tìm kiếm chức năng đó nếu nó không được tìm thấy trong danh sách có nghĩa là nó không có sẵn để sử dụng.

bạn có thể cần kích hoạt mở rộng cho thư viện cụ thể.


0

php.net định nghĩa điều này là

(PHP 4, PHP 5, PHP 7) function_exists - Trả về TRUE nếu hàm đã cho đã được xác định

Tôi phải đồng ý với Michelle về cách sử dụng ở chỗ bạn chỉ nên sử dụng kiểm tra cho một cái gì đó tương tự như kiểm tra diễn viên; vì vậy bạn sẽ tìm kiếm nếu một chức năng tồn tại (trên trang đó hoặc từ bất kỳ thứ gì được gọi trên tham chiếu trang / tệp đó), do đó bạn sẽ biết liệu có an toàn để chạy một chức năng khác hoặc phân tích một số HTML mẫu có thể.

Như ai đó đã đề cập, nó được sử dụng phổ biến để kiểm tra xem tệp / chủ đề của bạn (sử dụng WordPress) có thể chạy yêu cầu cần thiết của bạn không. Tôi đã sử dụng nó để kiểm tra xem một chủ đề có một phần mẫu cụ thể không.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }


0

function_exists nên được sử dụng sau tên hàm trong một chủ đề không phải trước đó.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Việc kiểm tra này để đảm bảo plugin hoạt động trước khi xuất ra một chức năng và / hoặc đánh dấu nếu không bạn có thể gặp lỗi như gọi đến chức năng không xác định.

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.