PHP gọi Callback như thế nào?

0
1852

PHP gọi Callback như thế nào?

1. Khái niệm Callback là gì?

Trong lập trình máy tính, callback là một đoạn code chạy được (thường là một hàm A) được sử dụng như tham số truyền vào của hàm B nào đó. Hàm A được gọi ngay lập tức hoặc trễ một chút sau khi hàm B được gọi. Các ngôn ngữ lập trình khác nhau hỗ trợ callback theo các cách khác nhau, thường được triển khai dưới dạng chương trình con, hàm nặc danh, chuỗi lệnh hoặc con trỏ hàm. (Nguồn wikipedia).

Nói một cách khác: Gọi lại là một phương thức sẽ được thực thi sau khi một phương thức khác đã được thực thi xong – do đó nó có tên là callback(gọi lại).

2. Callback trong PHP

Các ngôn ngữ lập trình đều hỗ trợ Callback nhưng có cách gọi & thực hiện khác nhau. Ngôn ngữ lập trình PHP cũng hỗ trợ Callback và có cách gọi rất đơn giản. Cùng nhantam xem một vài ví dụ như sau.

2.1 Ví dụ Callback trong PHP

Ví dụ 1:

<?php
function doSomething($callback) {
    $callback();
}
function sayHello() {
    echo "Hello";
}
doSomething('sayHello'); // Output Hello

// Hoặc chúng ta có thể sử dụng call_user_func();
function doSomething($var, $callback) {
    call_user_func($callback, $var);
}
function sayHello($var) {
    echo $var;
}
doSomething('Hello', 'sayHello'); // Output Hello

Ví dụ trên là simple và khá dễ hiểu, hàm sayHello được gọi trong hàm doSomething như là một tham số.

Ví dụ 2: Chuyển một lệnh gọi lại đến hàm array_map() của PHP để tính độ dài của mọi chuỗi trong một mảng

<?php
function my_callback($item) {
  return strlen($item);
}

$strings = ["apple", "orange", "banana", "coconut"];
$lengths = array_map("my_callback", $strings);
print_r($lengths);
// Output
Array
(
    [0] => 5
    [1] => 6
    [2] => 6
    [3] => 7
)

Ví dụ 2 ở trên chúng ta có thể thay thế theo cách viết khác như:

Ví dụ 3:

<?php
$strings = ["apple", "orange", "banana", "coconut"];
$lengths = array_map( function($item) { return strlen($item); } , $strings);
print_r($lengths);
// Output
Array
(
    [0] => 5
    [1] => 6
    [2] => 6
    [3] => 7
)

2.2 Callback trong class

Ví dụ 4:

<?php
class MyClass {

    public $property = 'Hello World!';

    public function MyMethod()
    {
        call_user_func(array($this, 'myCallbackMethod'));
    }

    public function MyCallbackMethod()
    {
        echo $this->property;
    }

}

Ví dụ trên chúng ta sử dụng biến $ this để chỉ định một lệnh gọi lại.

Ví dụ 5: PHP Callback cung cấp phương thức gọi lại với Callables

<?php
/**
 * Class Mycallback
 * Callback method in Class
 *
 * @copyright Panpic.vn
 * @author [email protected]
 */
class Mycallback
{

    function __construct(){

    }

    public function processCallback(callable $callback) {
        return $callback();
    }

    function doSomething(){
        $function_name = "myFunction";
        $this->processCallback([$this, $function_name]);
    }

    function myFunction() {
        echo "Hello Callback method of class";
    }

}

Chúng ta có thể thực hiện một số cách khác nhau với hàm processCallback() trong Class ở ví dụ 5 bên trên

  // Trong cùng một Class
  $this->processCallback([$this, 'myFunction']);
  
  // Gọi từ một Class khác
  $myObject->processCallback([new MyClass(), 'myFunction']);
  $this->processCallback([__CLASS__, 'myFunction']);
  // Namespace
  $myObject->processCallback(['\Namespace\MyClass', 'myFunction']);
  $myObject->processCallback(['\Namespace\MyClass::myFunction']); // PHP 5.2.3+
  $myObject->processCallback([MyClass::class, 'myFunction']); // PHP 5.5.0+

3. Khi nào nên sử dụng Callback

Để đảm bảo các chức năng thực hiện đúng thứ tự ta định sẵn, ta cần sử dụng đến khái niệm callback function. Callback là cách đảm bảo code sẽ không hoạt động trước khi các code khác hoàn thành việc thực thi.

Nếu các bạn có đóng góp chia sẽ thêm về Callback, có thể để lại comment bên dưới để cùng học tập lập trình

Chúc các bạn thành công

nhantam
Lập trình web app tại Panpic

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

+ 47 = 50