Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

User-defined functions (Hàm do người dùng định nghĩa) trong PHP

Giới thiệu

PHP có nhiều built-in functions (toán học, chuỗi, ngày tháng, mảng...). Cũng có thể tự định nghĩa function theo yêu cầu cụ thể - gọi là user-defined function.

Function là block câu lệnh tái sử dụng thực hiện task cụ thể. Định nghĩa bằng từ khóa function, tên bắt đầu bằng chữ cái hoặc underscore. Function có thể gọi từ bất kỳ đâu trong chương trình bao nhiêu lần tùy ý.

Cú pháp

// Định nghĩa function
function myfunction($arg1, $arg2, ... $argn) {
    statement1;
    statement2;
    ...
    return $val;
}

// Gọi function
$ret = myfunction($arg1, $arg2, ... $argn);

Function có thể có tham số tùy chọn nhưng số lượng bất kỳ. Tuy nhiên, khi gọi phải cung cấp đúng số lượng. Body function chứa bất kỳ code PHP hợp lệ (điều kiện, vòng lặp, thậm chí function/class khác). Sau khi thực thi block, điều khiển quay lại nơi gọi bất kể có return cuối cùng hay không. Biểu thức trước return trả giá trị cho môi trường gọi.

Ví dụ

Function đơn giản

<?php
function sayHello() {
    echo "Hello World!";
}
sayHello();
?>

Kết quả

Hello World!

Function có tham số

<?php
function add($arg1, $arg2) {
    echo $arg1 + $arg2 . "\n";
}
add(10, 20);
add("Hello", "World");
?>

Kết quả

30
PHP Warning: A non-numeric value encountered in line 3

Lần gọi thứ 2 truyền string, PHP không hỗ trợ + cho string nên phát warning.

Function có return

<?php
function add($arg1, $arg2) {
    return $arg1 + $arg2;
}
$val = add(10, 20);
echo "addition: " . $val . "\n";
$val = add("10", "20");
echo "addition: $val";
?>

Kết quả

addition: 30
addition: 30

Lần gọi 2, dù argument là string, PHP ép kiểu thành integer và cộng.

Function có default argument

<?php
function welcome($user = "Guest") {
    echo "Hello $user\n";
}
welcome("admin"); // ghi đè default
welcome();        // dùng default
?>

Kết quả

Hello admin
Hello Guest

Function với số lượng tham số biến đổi (variadic)

Định nghĩa function nhận số lượng argument biến đổi. Tên tham số formal tiền tố bằng ...:

<?php
function add(...$numbers) {
    $ttl = 0;
    foreach ($numbers as $num) {
        $ttl = $ttl + $num;
    }
    return $ttl;
}
$total = add(10, 15, 20);
echo "total = $total\n";
echo "total = " . add(1, 2, 3, 4, 5) . "\n";
?>

Kết quả

total = 45
total = 15

Dùng func_get_args()

Có thể lấy danh sách argument truyền vào bằng func_get_args(). Function definition không cần formal argument:

<?php
function add() {
    $numbers = func_get_args();
    $ttl = 0;
    foreach ($numbers as $num) {
        $ttl = $ttl + $num;
    }
    return $ttl;
}
$total = add(10, 15, 20);
echo "total = $total\n";
echo "total = " . add(1, 2, 3, 4, 5) . "\n";
?>

Kết quả

total = 45
total = 15

Function bên trong function khác

Function có thể định nghĩa bên trong body function khác. Tuy nhiên, inner function không thể gọi trước khi outer function đã được invoke.

<?php
function hello() {
    echo "Hello\n";
    function welcome() {
        echo "Welcome to TutorialsPoint\n";
    }
}
// welcome(); // lỗi nếu gọi trước hello()
hello();
welcome();
?>

Kết quả

Hello
Welcome to TutorialsPoint

Recursive function (Đệ quy)

Function tự gọi chính nó gọi là recursive function. Gọi không điều kiện tạo vòng lặp vô tận và lỗi out of memory do stack full. Chương trình sau gọi factorial() đệ quy:

<?php
function factorial($n) {
    if ($n < 2) {
        return 1;
    } else {
        return $n * factorial($n - 1);
    }
}
echo "factorial(5) = " . factorial(5);
?>

Kết quả

factorial(5) = 120