Hướng dẫn how to create dynamic function name in php? - cách tạo tên hàm động trong php?

Tôi muốn đơn giản hóa việc tạo "các loại bài đăng tùy chỉnh" trong WordPress vì thật tẻ nhạt khi đi qua cùng một tập lệnh và thay đổi tất cả các phiên bản tên loại bài tùy chỉnh theo cách thủ công.

Nó khá đơn giản để đạt được bằng cách tạo một biến có chứa tên CPT và sử dụng nó ở mọi nơi cần thiết. Bằng cách này, tất cả những gì tôi phải làm là khai báo biến ở phần đầu của tập lệnh và điều đó nên chăm sóc phần còn lại.

Vấn đề duy nhất là, để làm cho nó hoạt động, tôi cũng cần tiền tố tên CPT trước mọi hàm bên trong tập lệnh và dường như sử dụng một biến trong tên hàm không dễ dàng hoặc thậm chí được đề xuất trong PHP.

Vậy làm thế nào tôi có thể giải quyết điều này?

Dưới đây là một ví dụ dưới đây để làm rõ:

$prefix = 'news';

function news_custom_type_init()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');

Điều này gần như tốt và có thể được tiêu chuẩn hóa nếu chỉ tôi có thể đổi tên chức năng tự động để không phải viết từ "tin tức" trước nó nhưng thay vào đó sử dụng "tiền tố $".

Điều này có thể tốt đẹp nhưng chỉ không hoạt động:

$prefix = 'news';

$functionName= $prefix."_custom_type_init";

function $functionName()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');

Phải đặt tên thủ công chức năng đánh bại mục đích ban đầu của nỗ lực của tôi (đặc biệt là khi tập lệnh nhúng hàng tá các chức năng như thế này).

cách nào tốt nhất để làm việc này?

Tái bút: Tôi đã googled và "stackoverflowed" rất nhiều về điều này nhưng không tìm thấy bất kỳ giải pháp làm việc nào phù hợp với nhu cầu của tôi và không tạo thông báo lỗi WordPress.

Cảm ơn bạn.

Động cơ gọi các hàm theo tên của họ, sử dụng đầu vào từ người dùng, là một giải pháp thay thế thuận tiện cho các câu lệnh cho phép gọi có điều kiện gọi các phần cụ thể trong mã của bạn.

938 lượt xem views

Hướng dẫn how to create dynamic function name in php? - cách tạo tên hàm động trong php?

Qua. JacobJacob

Đã chỉnh sửa: 2021-02-14 05:322021-02-14 05:32

Thay vì dựa vào một loạt các câu lệnh IF, nó thường hữu ích hơn khi gọi một hàm hoặc phương thức một cách linh hoạt, vì nó có xu hướng làm cho mã của bạn dễ đọc hơn nhiều; Cách để làm điều đó là bằng cách sử dụng call_user_func để gọi một hàm theo tên.

Một nơi mà điều này cực kỳ hữu ích là khi tạo ra một bộ định tuyến. Đối với những người không biết bộ định tuyến là gì, về cơ bản nó là một đoạn mã xử lý các URL trên một trang web; Bộ định tuyến chọn mã nào để gọi tùy thuộc vào URL được người dùng yêu cầu.

Trong ví dụ sau, trước tiên tôi kiểm tra xem một hàm có thể gọi được không và nếu trường hợp, hàm được gọi; Nếu không, lỗi không tìm thấy được hiển thị cho người dùng:

$requested_feature = 'frontpage';

if (is_callable('feature_' . $requested_feature)) {
  call_user_func('feature_' . $requested_feature, $feature_path);
} else {
  http_response_code(404);
  echo 'Page not recognized...';
  exit();
}

Đây là một hình thức thực thi có điều kiện chỉ sử dụng các hàm hoặc phương thức thay vì các cấu trúc có điều kiện như nếu các câu lệnh và công tắc.

Bạn sẽ viết các định nghĩa chức năng cho từng tính năng như bình thường:

function feature_frontpage() {
  echo 'You have requested the blog';
  exit();
}

Mỗi chức năng mà bạn cho phép gọi theo cách này phải được đặt trước với tính năng_ để ngăn người dùng gọi các phần không mong muốn trong mã của bạn.

Phương thức gọi động

Ví dụ trên là thủ tục; Nếu bạn muốn làm điều này từ bối cảnh định hướng đối tượng, thay vào đó bạn sẽ thích như vậy:

$features_object = new features();

if (is_callable([$features_object, 'feature_'.$requested_feature])) {
  call_user_func([$features_object, 'feature_'.$requested_feature], $feature_path);
} else {
  http_response_code(404);
  echo 'Page not recognized...';
  exit();
}

Bản thân các chức năng được có tiền tố với "feature_" để chỉ ra tốt hơn rằng chúng được gọi tự động thông qua đầu vào người dùng. Để gọi hàm, người dùng có thể nhập tên hàm vào tham số URL được kiểm tra bởi ứng dụng; Điều này có thể trông như vậy:

$features_object = new features();

$requested_feature = (!empty($_GET['feature_name'])) ? $_GET['feature_name'] : null;

if (is_callable([$features_object, 'feature_'.$requested_feature])) {
  call_user_func([$features_object, 'feature_'.$requested_feature], $feature_path);
} else {
  http_response_code(404);
  echo 'Page not recognized...';
  exit();
}

class features {
  public function feature_blog() {
    echo 'You have requested the blog';
    exit();
  }
  public function feature_frontpage() {
    echo 'You have requested the blog';
    exit();
  }
}

Điều này sau đó có thể được truy cập thông qua URL trong thanh địa chỉ trình duyệt:

https://example.com/?feature_name=blog

Nếu câu lệnh vs call_user_func

Khi một dự án phát triển lớn hơn, nó ngày càng trở nên quan trọng hơn khi bạn có thể mở rộng nó một cách linh hoạt mà không phải sửa đổi mã định tuyến; Sử dụng CALL_USER_FUNC linh hoạt hơn đáng kể so với việc sử dụng các câu lệnh IF để thực hiện công việc định tuyến của bạn.

Tuy nhiên, điều này cũng đi kèm với những hạn chế. Thật không may, trong khi các định nghĩa hoặc chức năng của lớp dễ đọc hơn, việc sử dụng chúng để xử lý định tuyến vẫn bị giới hạn trong tính linh hoạt và khi chúng phát triển, chúng cũng sẽ trở nên khá cồng kềnh khi làm việc.

Một sự thay thế thậm chí còn tốt hơn cho phương pháp này là giữ mã định tuyến của bạn trong các tệp bên ngoài, và sau đó tải nó một cách linh hoạt dựa trên tên tệp; Khái niệm này là như nhau, nhưng bạn chỉ sử dụng File_Exists để kiểm tra xem một tệp có tồn tại trước khi cố gắng bao gồm nó không, thay vì sử dụng is_callable.

Liên kết

  1. is_callable - php.net
  2. Call_user_func - php.net

  1. Khi sử dụng File_Get_Contents để thực hiện các yêu cầu HTTP, các tiêu đề phản hồi của máy chủ được lưu trữ trong một biến dành riêng sau mỗi yêu cầu thành công; Chúng tôi có thể lặp lại điều này khi chúng tôi cần truy cập các tiêu đề phản hồi cá nhân.

  2. Cách sử dụng hiệu quả các biến trong các chuỗi để chèn các bit dữ liệu khi cần thiết.

  3. Bộ đệm xả và đầu ra đi đôi với nhau, và trong bài viết này, tôi cố gắng kiểm tra các lợi ích và nhược điểm đối với việc xả nước.

  4. Cách sử dụng định dạng hình ảnh AVIF trong PHP; A1 hoặc AVIF là định dạng hình ảnh mới cung cấp nén tốt hơn trang web, JPEG và PNG và đã hoạt động trong Google Chrome.

  5. Cách tạo bộ định tuyến trong PHP để xử lý các loại yêu cầu, đường dẫn và tham số yêu cầu khác nhau.

Thêm trong: Hướng dẫn PHP

Hàm động PHP là gì?

Hàm động gọi có thể gán tên hàm là chuỗi cho các biến và sau đó xử lý các biến này chính xác như chính bạn sẽ tự tên.It is possible to assign function names as strings to variables and then treat these variables exactly as you would the function name itself.

Cách chính xác để tạo chức năng trong PHP là gì?

Để khai báo một loại cho trả về hàm, thêm một dấu hai chấm (:) và loại ngay trước khung xoăn mở ({) khi khai báo hàm.add a colon ( : ) and the type right before the opening curly ( { )bracket when declaring the function.

Các biến động trong PHP là gì?

Biến động là mã PHP do người dùng xác định phải trả về giá trị chuỗi.Để tạo một biến động mới, hãy làm theo các bước sau: Chuyển đến Danh mục → Nguồn cấp sản phẩm nâng cao → Biến động.a user-defined php code that must return a string value. To create a new dynamic variable, follow these steps: Go to Catalog → Advanced Product Feeds → Dynamic Variables.

Hàm biến PHP là gì?

Các chức năng biến ¶ Điều này có nghĩa là nếu một tên biến có dấu ngoặc đơn được thêm vào nó, PHP sẽ tìm kiếm một hàm có cùng tên với bất kỳ biến nào đánh giá và sẽ cố gắng thực hiện nó.Trong số những thứ khác, điều này có thể được sử dụng để thực hiện các cuộc gọi lại, bảng chức năng, v.v.if a variable name has parentheses appended to it, PHP will look for a function with the same name as whatever the variable evaluates to, and will attempt to execute it. Among other things, this can be used to implement callbacks, function tables, and so forth.