Móc là gì? [đóng cửa]


15

Tôi tiếp tục gặp thuật ngữ này trong các bài viết lập trình khác nhau. Tuy nhiên tôi không hiểu chúng là gì và làm thế nào để sử dụng chúng. Vì vậy, tôi chỉ muốn biết khái niệm móc là gì; nếu ai đó có thể liên kết tôi với một số ví dụ, đặc biệt là trong bối cảnh phát triển web, nó sẽ rất tuyệt.


Phương thức hook là một phương thức cụ thể trong một lớp trừu tượng có thể bị ghi đè bởi các lớp con, nhưng nó có một hành vi mặc định trong lớp trừu tượng.
gal007

Câu trả lời:


18

Câu trả lời của tôi liên quan đến WordPress được viết bằng PHP, nhưng đây là một cơ chế phát triển chung vì vậy nó không thực sự quan trọng, mặc dù thực tế là bạn đặt 'python' trong tiêu đề câu hỏi của bạn.

Một ví dụ điển hình về việc sử dụng hook, ngẫu nhiên trong phát triển web, là hook của WordPress .

Chúng được đặt tên một cách thích hợp ở chỗ chúng cho phép một cách để 'móc vào' một số điểm nhất định của việc thực hiện chương trình.

Vì vậy, ví dụ, wp_head là một 'hành động' được phát ra khi một chủ đề WordPress được hiển thị và đó là phần mà nó hiển thị phần nằm trong các <head>thẻ. Giả sử bạn muốn viết một plugin yêu cầu một biểu định kiểu, tập lệnh hoặc thứ gì đó thường đi trong các thẻ đó. Bạn có thể 'nối vào' hành động này bằng cách xác định một chức năng sẽ được gọi khi hành động này được phát ra. Cái gì đó như:

add_action('wp_head', 'your_function');

your_function() có thể là một cái gì đó đơn giản như:

function your_function() {
    echo '<link rel="stylesheet" type="text/css" href="lol.css" />';
}

Bây giờ, khi WordPress phát ra hành động này bằng cách thực hiện một cái gì đó như thế do_action('wp_head');, nó sẽ thấy hành động đó your_function()được 'nối vào' , vì vậy nó sẽ gọi hàm đó ( và chuyển bất kỳ đối số nào nếu có bất kỳ, như được định nghĩa trong tài liệu cho bất kỳ hook cụ thể nào ).

Câu chuyện dài: Nó cho phép bạn thêm chức năng bổ sung tại các điểm cụ thể của việc thực hiện chương trình bằng cách 'nối vào' các điểm đó, trong hầu hết các trường hợp bằng cách gán hàm gọi lại.


2

Tùy thuộc vào nền tảng của người hỏi đôi khi câu trả lời cho câu hỏi này có thể đơn giản vì móc thường là một từ khác cho một người xử lý sự kiện, mà Blaenk đã đưa ra một lời giải thích tuyệt vời cho.

Cũng có những cách sử dụng cụm từ này là khi bạn đưa một sự kiện hoặc mã vào một quy trình mà nếu không thì không có các sự kiện như nốt ruồi chẳng hạn.


Cảm ơn Bill, nốt ruồi trông giống như một khái niệm .NET, hoàn toàn xa lạ với tôi, bạn có thể vui lòng chỉ cho tôi một cái gì đó pythonic hoặc php hoặc một cái gì đó tổng quát hơn.
Rasmus

Thật không may, tôi không sử dụng hai thứ đó đủ để khẳng định chuyên môn, nhưng nếu tôi đọc nó một cách chính xác, tôi tin stackoverflow.com/questions/156230/ . Trình điều khiển miniport đôi khi là cụm từ hook được sử dụng. Quan điểm của tôi là nhiều hơn rằng thuật ngữ "hook" đôi khi có thể được sử dụng theo cách khác, trong công nghệ MS cũ hơn, có lẽ cách sử dụng thứ hai cũng không áp dụng cho python.
Hóa đơn
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.