Trong phần trước, chúng ta đã tìm hiểu các khái niệm cơ bản về hàm trong PHP. Bài viết này sẽ tìm hiểu với những khái niệm và kỹ thuật nâng cao về hàm, cũng như cách ứng dụng chúng vào thực tế.

>>> Xem thêm các bài viết trong chuỗi bài về ngôn ngữ lập trình PHP:

1. Hàm và phạm vi tác dụng của biến

1.1. Phạm vi tác dụng của biến

Phạm vi tác dụng của biến là phạm vi mà biến có thể được truy cập và sử dụng. Có hai loại phạm vi chính trong PHP: phạm vi cục bộ (local scope) và phạm vi toàn cục (global scope).

1.2. Biến cục bộ và biến toàn cục biến cục bộ

Là biến được khai báo bên trong một hàm và chỉ có thể được sử dụng trong phạm vi của hàm đó.

function exampleFunction() {
    $localVariable = "This is a local variable.";
    echo $localVariable;
}

Biến toàn cục: Là biến được khai báo ở phạm vi toàn cục và có thể được sử dụng ở mọi nơi trong chương trình.

$globalVariable = "This is a global variable.";

function exampleFunction() {
    global $globalVariable;
    echo $globalVariable;
}

1.3. Sử dụng biến toàn cục trong hàm

Từ khóa global để sử dụng biến toàn cục trong hàm, bạn cần sử dụng từ khóa global.

$globalVariable = "This is a global variable.";

function exampleFunction() {
    global $globalVariable;
    echo $globalVariable;
}

2. Tham biến và Tham trị

Trong PHP, tham số khi truyền vào hàm có thể là tham trị hoặc tham biến.

Tham trị: Trong trường hợp này, giá trị của biến được sao chép vào tham số của hàm.

function addTen($num) {
    $num += 10;
    echo $num;
}

$number = 5;
addTen($number); // In ra "15"
echo $number; // Vẫn là "5"

Tham biến: Trong trường hợp này, hàm nhận vào biến và thay đổi trực tiếp giá trị của biến.

function addTen(&$num) {
    $num += 10;
    echo $num;
}

$number = 5;
addTen($number); // In ra "15"
echo $number; // Giờ là "15"

3. Tham số mặc định

Trong PHP, bạn có thể đặt giá trị mặc định cho tham số của hàm.

function greet($name = "Guest") {
    echo "Hello, $name!";
}

greet(); // In ra "Hello, Guest!"
greet("John"); // In ra "Hello, John!"

4. Hàm với lượng tham số tùy ý

Bạn có thể định nghĩa hàm với lượng tham số không cố định bằng cách sử dụng dấu ba chấm (...). Các tham số này sẽ được đóng gói vào một mảng.

function sum(...$numbers) {
    $result = 0;
    foreach ($numbers as $num) {
        $result += $num;
    }
    echo $result;
}

sum(1, 2, 3, 4); // In ra "10"

5. Chỉ dẫn kiểu (Type Hint)

Chỉ dẫn kiểu giúp bạn xác định kiểu dữ liệu mà một tham số hoặc giá trị trả về của hàm phải có.

function add(int $a, int $b): int {
    return $a + $b;
}

$result = add(5, 3); // Đúng
$result = add("5", "3"); // Sai, vì kiểu dữ liệu không đúng

6. Một số ví dụ về hàm trong PHP

6.1. Hàm vô danh (Anonymous Functions)

Hàm ẩn danh (Anonymous Function) trong PHP (stringee.com) Hàm vô danh, hay còn gọi là closure, là một hàm không có tên. Bạn có thể gán hàm này cho một biến và sử dụng nó như một đối số hoặc giá trị trả về. Đây là một ví dụ:

$add = function($a, $b) {
    return $a + $b;
};

$result = $add(3, 5); // $result sẽ chứa giá trị 8

6.2. Hàm biến (Variable Functions)

Trong PHP, bạn có thể sử dụng một biến để chứa tên của hàm và gọi nó thông qua biến đó. Điều này thường được sử dụng khi bạn muốn tùy chọn hàm cần gọi dựa trên điều kiện nào đó. Ví dụ:

function greetEnglish($name) {
    echo "Hello, $name!";
}

function greetFrench($name) {
    echo "Bonjour, $name!";
}

$language = "English";
$greet = "greet" . $language;

$greet("John"); // Tương đương với greetEnglish("John");

6.3. Hàm đệ quy

Hàm đệ quy là hàm có khả năng gọi chính nó. Điều này thường được sử dụng để giải quyết các vấn đề được mô tả dưới dạng đệ quy. Dưới đây là một ví dụ tính giai thừa:

function factorial($n) {
    if ($n <= 1) {
        return 1;
    } else {
        return $n * factorial($n - 1);
    }
}

echo factorial(5); // In ra "120"

6.4. Hàm trả về đa giá trị 

Trong PHP, một hàm có thể trả về nhiều giá trị thông qua các cú pháp đặc biệt như list() hoặc sử dụng mảng kết hợp. Điều này cho phép bạn trả về nhiều kết quả từ một hàm duy nhất.

function getCoordinates() {
    return ['latitude' => 40.7128, 'longitude' => -74.0060];
}
$coordinates = getCoordinates();
echo "Latitude: " . $coordinates['latitude'] . ", Longitude: " . $coordinates['longitude'];

6.5. Sử dụng Closure

Với use Closure (hàm vô danh) có thể sử dụng biến bên ngoài phạm vi của nó thông qua từ khóa use. Điều này cho phép bạn truy cập và thay đổi các biến bên ngoài trong hàm.

$message = "Hello";

$greeting = function() use ($message) {
    echo $message;
};

$message = "Bonjour";
$greeting(); // In ra "Hello", vì giá trị của $message đã được capture khi khai báo closure

6.6. Hàm __invoke trong PHP

Nếu một đối tượng được khai báo để triển khai __invoke(), thì đối tượng đó có thể được gọi như một hàm.

class Example {
    public function __invoke($x) {
        return $x * $x;
    }
}

$example = new Example();
echo $example(5); // In ra "25"

6.7. Hàm Generator 

Generator là một cách linh hoạt để tạo ra dữ liệu mà không cần phải lưu trữ toàn bộ trong bộ nhớ. Cú pháp yield được sử dụng để tạo ra các giá trị từ một hàm generator.

function generateNumbers($start, $end) {
    for ($i = $start; $i <= $end; $i++) {
        yield $i;
    }
}

foreach (generateNumbers(1, 5) as $number) {
    echo $number . ", "; // In ra "1, 2, 3, 4, 5, "
}

Kết luận

Trong bài viết này, chúng ta đã đi sâu vào khám phá những khái niệm và kỹ thuật nâng cao liên quan đến hàm trong PHP. Bằng cách hiểu rõ về phạm vi tác dụng của biến, sự khác biệt giữa tham biến và tham trị, cũng như các tính năng như tham số mặc định, lượng tham số tùy ý, và chỉ dẫn kiểu, bạn đã có thêm những công cụ mạnh mẽ để xây dựng mã nguồn PHP linh hoạt và dễ bảo trì. 

Việc hiểu biết vững về hàm không chỉ làm cho mã nguồn của bạn trở nên dễ đọc, dễ bảo trì, mà còn giúp bạn xây dựng những ứng dụng PHP mạnh mẽ, linh hoạt và an toàn. Hãy tiếp tục theo dõi Stringee để cập nhật kiến thức và nâng cao kỹ năng lập trình của bạn.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: