Php gọi phương thức lớp động

Tự động gọi hàm trong PHP

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

1182 lượt xem

Php gọi phương thức lớp động

Bởi. Jacob

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

Thay vì dựa vào một loạt các câu lệnh if, việc gọi một hàm hoặc phương thức một cách linh hoạt thường hữu ích hơn, vì nó có xu hướng làm cho mã của bạn dễ đọc hơn nhiều;

Một nơi mà điều này cực kỳ hữu ích là khi tạo 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;

Trong ví dụ sau, trước tiên tôi kiểm tra xem một hàm có thể gọi được hay không và nếu đúng như vậy, hàm đó được gọi;

$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 dạng thực thi có điều kiện chỉ sử dụng hàm hoặc phương thức thay vì cấu trúc điều kiện như câu lệnh if và switch

Bạn sẽ viết các định nghĩa hàm 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ó tiền tố là feature_ để ngăn người dùng gọi các phần không mong muốn trong mã của bạn

Các phương thức gọi động

Ví dụ trên là thủ tục;

$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 bắt đầu bằng "feature_" để chỉ rõ hơn rằng chúng được gọi động thông qua đầu vào của người dùng. Để gọi một hàm, người dùng có thể nhập tên hàm vào tham số URL được ứng dụng kiểm tra;

$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 một URL trong thanh địa chỉ của trình duyệt

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

Nếu câu lệnh so với call_user_func

Khi một dự án phát triển lớn hơn, điều quan trọng hơn là 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;

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 lớp hoặc chức năng dễ đọc hơn, việc sử dụng chúng để xử lý định tuyến vẫn bị hạn chế về 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 với

Một giải pháp 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, sau đó tải mã đó một cách linh hoạt dựa trên tên tệp;

Làm cách nào để gọi một lớp động trong PHP?

# Sử dụng cú pháp mảng có thể gọi . Ví dụ. //PHP5. 5+ $callable = [$object, $non Static Method];

Làm cách nào để đặt tên hàm động trong PHP?

Hoàn toàn đơn giản để đạt được bằng cách tạo một biến 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 ở đầu tập lệnh và điều đó sẽ lo phần còn lại.