2008-10-23 56 views
11

Tôi muốn sử dụng php simple HTML DOM parser để lấy hình ảnh, tiêu đề, ngày tháng và mô tả từ mỗi bài viết trên một trang đầy đủ các bài viết. Khi nhìn vào API, tôi nhận thấy nó có một set_callback đặt một hàm gọi lại. Tuy nhiên im không chắc chắn những gì này không hoặc làm thế nào tôi sẽ sử dụng nó? Trong một trong những ví dụ của nó được sử dụng để gọi một chức năng mà dải ra một số công cụ, im tự hỏi nếu bạn phải sử dụng điều này để gọi tất cả các chức năng?Chức năng gọi lại là gì và cách sử dụng chức năng này với OOP

Tôi đoán tôi tự hỏi tại sao tôi sử dụng tính năng này và tôi làm gì khi tôi chưa bao giờ gặp chức năng gọi lại trước đây!

Trả lời

20

Dưới đây là một chức năng gọi lại cơ bản Ví dụ:

<?php 

function thisFuncTakesACallback($callbackFunc) 
{ 
    echo "I'm going to call $callbackFunc!<br />"; 
    $callbackFunc(); 
} 

function thisFuncGetsCalled() 
{ 
    echo "I'm a callback function!<br />"; 
} 

thisFuncTakesACallback('thisFuncGetsCalled'); 
?> 

Bạn có thể gọi một hàm có tên của nó được lưu trữ trong một biến như thế này: biến $().

Vì vậy, trong ví dụ trên, chúng tôi vượt qua tên của thisFuncGetsCalled chức năng để thisFuncTakesACallback() mà sau đó gọi hàm thông qua vào.

+0

Câu trả lời tuyệt vời và đơn giản, cảm ơn. Tôi đã có một câu hỏi mặc dù, phiên bản PHP yêu cầu tối thiểu có tính năng này có sẵn là gì? –

+3

Câu trả lời này đã lỗi thời. Ngày nay, PHP sử dụng thuật ngữ 'gọi lại' để chỉ một loại chức năng cụ thể. Để biết thêm thông tin, hãy đọc tài liệu riêng của PHP về vấn đề này: http://php.net/manual/en/function.call-user-func.php –

+0

nó vẫn hoạt động trong php7 –

3

Một chức năng gọi lại sẽ sử dụng chức năng đó trên bất kỳ dữ liệu là được trả về bởi một phương thức cụ thể.

Tôi không chắc chắn cách này đặc biệt công trình thư viện, nhưng nó có thể là một cái gì đó đơn giản như:

$html = file_get_html('http://example.com'); 
$html->set_callback('make_bold'); 
$html->find('#title'); // returns an array 

function make_bold($results) { 
// make the first result bold 
    return '<b>'.$results[0].'</b>'; 
} 

tức, Chức năng "make_bold()" sẽ được chạy trên bất kỳ dữ liệu được tìm thấy. Một lần nữa, tôi không chắc chắn thư viện này hoạt động như thế nào (ví dụ, phương thức mà hàm gọi lại sẽ được gọi)

2

Gọi lại là hàm, phương thức đối tượng hoặc phương thức tĩnh trên lớp. Dù bằng cách nào, nó là loại con trỏ hàm. Trong một số ngôn ngữ, các hàm là một kiểu cụ thể. Vì vậy, bạn có thể gán một hàm cho một biến. Chúng thường được gọi là ngôn ngữ định hướng chức năng. Một ví dụ tốt là Javascript.

Trong PHP, một callback có thể là bất kỳ:

$fn = 'foo'; // => foo() 
$fn = array($obj, 'foo'); // => $obj->foo() 
$fn = array('Foo', 'bar'); // => Foo::bar() 

Xem bài hướng dẫn về is_callable.

Bạn có thể gọi hàm gọi lại với hàm khá chi tiết call_user_func.

0

Defination

Một callbacks/callable là một chức năng đơn giản (hoặc nó là chức năng ẩn danh hoặc tên) mà chúng ta vượt qua chức năng khác như tham số chức năng mà trong lợi nhuận kết quả là thông qua chức năng.

Ví dụ

function iWillReturnCallback($callBackHere){ 
    return $callBackHere; 
} 

function iAmCallBack(){ 
    echo "I am returned with the help of another function"; 
} 

iWillReturnCallback(iAmCallBack()); 

//--Output -> I am returned with the help of another function 

Đừng để bị nhầm lẫn

Có một số chức năng mặc định trong php chấp nhận tên của chức năng gọi lại dưới dạng chuỗi trong tham số của họ, vì để tránh mâu thuẫn giữa tên hằng số và tên hàm. Vì vậy, đừng nhầm lẫn trong những điều này.

0

Với PHP 5.3, bây giờ bạn có thể làm điều này:

function doIt($callback) { $callback(); } 

doIt(function() { 
    // this will be done 
}); 

Cuối cùng, một cách tốt đẹp để làm điều đó. Một bổ sung tuyệt vời cho PHP, bởi vì các cuộc gọi lại rất tuyệt vời.

+0

Điều gì sẽ xảy ra nếu '$ callback' không phải là một hàm ? PHP có ném một lỗi nghiêm trọng, cảnh báo, hoặc không có gì? – Spartacus

Các vấn đề liên quan