1. Hàm trong PHP là gì?

Hàm trong PHP là một nhóm code được viết ra để ta thực thi 1 hoặc nhiều hành động khi gọi nó. Hàm sẽ hoạt động trên một số thông tin đầu vào(tham số) và sẽ trả lại cho ta một kết quả. Hàm có khả năng gọi đi gọi lại, tái sử dụng ở trong script.

Giả sư như chúng ta làm một chương trình cho người dùng đăng nhập vào trang web và bạn sử dụng ở 2 ứng dụng backend và frontend (sẽ được tìm hiểu sau). Nhưng nếu bạn muốn sửa lại một số thông tin gì đó thì sao? Ta chỉ cần sử dụng hàm trong bài và sửa hàm là xong.

Bên cạnh các hàm mà PHP có sẵn thì người dùng có thể tạo hàm được các hàm của riêng mình.

2. Cấu trúc của một hàm trong PHP

Cấu trúc tổng quát của hàm sẽ như sau:

function ten_ham($thamso)
{
    // code 
    return $thamso;
}

Trong đó:

  • Function : là một từ khóa bắt buộc có để khai báo được hàm.
  • Ten_ham : là tên của hàm mà bạn muốn đặt(giống như đặt tên biến).
  • $thamso : Là các biến mà ta truyền vào trong hàm.
  • Return $thamso : là hàm sẽ trả về giá trị $thamso.

Chú ý

  • Trong PHP không ràng buộc hàm có hay không có giá trị trả về nên ta có thể có hoặc không có return.
  • Tên hàm bắt đầu bằng dấu gạch dưới hoặc một ký tự. Không được bắt đầu bằng số hay ký tự đặc biệt. Tên hàm không phân biệt chữ in hoa in thường.

Ví dụ:

<?php 
$number = 20;
// gọi đến hàm kiem_tra_so_chan và truyền biến cần kiểm tra vào
if (kiem_tra_so_chan($number)){
    echo 'Số chẵn';
}
else{
    echo 'Số lẽ';
}
// vì hàm kiem_tra_so_chan trả về true/false nên ta có thể đặt nó trong câu điều kiện if như thế này
function kiem_tra_so_chan($number)
{
    if ($number % 2 == 0)
        return true;
    else return false;
}
// Hàm kiểm tra số chẵn sẽ trả về true nếu $number là số chẵn và ngược lại.
// biến $number gọi là biến truyền vào hàm, đó chính là biến cần kiểm tra
 ?>

Sau khi khởi tạo hàm kiem_tra_so_chan, ta có nếu chẵn hàm trả về True và lẻ trả về False. Tham số truyền vào kiểm tra ở đây chính là $bien. Trong chương trình ta gọi đến hàm kiem_tra_so_chan và kiểm tra xem nó trả về kết quả gì, nếu là True thì in ra màn hình số chẵn , ngược lại thì False thì in ra màn hình số lẻ.

3. Đối số của hàm trong PHP

Các đối số được chỉ định sau tên hàm, trong dấu ngoặc đơn. Thông tin có thể được chuyển đến các hàm thông qua các đối số. Một đối số sẽ giống như một biến.

3.1. Gán giá trị mặc định cho biến

Ta có thể truyền giá trị mặc định vào biến trong các hàm. Ví dụ như việc ta khai báo 2 biến truyền vào mà lúc sử dụng ta chỉ truyền 1 biến vào thôi thì sẽ gặp lỗi. Vậy ta muốn những hàm mà không bị ràng buộc phải bắt truyền đủ biến vào thì ta sẽ gán giá trị mặc định cho biến.

Cú pháp:

function tenham($thamso = 'giaitri'){
          //code
}

Bạn hãy tham khảo ví dụ sau để hiểu rõ hơn:

<?php 
$so1 = 3;
$so2 = 9;
echo tong($so1, $so2);
function tong($a, $b, $c = false)
{
    $tong = $a + $b;
    if ($c != false){ 
        $tong = $tong + $c; 
    }
    return $tong;
}
?>

Ta có $c là biến có giá trị mặc định là false. Sau khi ta khai báo hàm tính tổng của 3 số. Ta dùng if để đưa ra điều kiện, nếu $c được truyền vào thì ta sẽ cộng thêm c. Nếu không thì ta sẽ chỉ tính tổng của 2 số a và b.

3.2. Truyền nhiều biến vào trong hàm

Các biến truyền vào trong PHP có thể là các kiểu dữ liệu bất kỳ. Số biến truyền vào cũng không giới hạn, ta có thể truyền bao nhiêu biến tùy thích, chỉ cần phân tách chúng bằng dấu phẩy.

Cú pháp:

function tenham($bien 1,$bien,$bien 3){
          //code
}

Ta có ví dụ sau:

<?php 
$so1 = 3;
$so2 = 9;
echo tinhtong($so1, $so2);
function tinhtong($a, $b)
{
    return $a + $b;
}
 ?>

4. Gọi hàm trong PHP

Phía trên là cách mà ta xây dựng và để sử dụng được ta phải gọi hàm ra. Có 2 cách gọi hàm thông dụng trong PHP:

  • Truyền bằng giá trị.
  • Truyền bằng tham chiếu.

4.1. Truyền bằng giá trị

Ta có mặc định các đối số truyền vào hàm đều là truyền bằng giá trị. Nếu truyền bằng giá trị thì trong hàm nếu ta tác động đến giá trị biến truyền vào thì sau khi thoát ra khỏi hàm giá trị đó sẽ không thay đổi.

Ví dụ :

<?php 
$x = 1;
function tang(&$x)
{
    return $x + 1;
}
echo tang($x);
echo $x;
 ?>

Sau khi gọi hàm tang($x), kết quả sau khi xuất ra màn hình là 2 và 1. Vì sau khi hàm kết thúc giá trị $x vẫn giữ nguyên là 1.

4.2. Truyền bằng tham chiếu

Ở trên sau khi hàm kết thúc thì giá trị biến không thay đổi. Vậy ta muốn giá trị của biến thay đổi theo hàm thì ta sẽ dùng cách truyền bằng tham chiếu.

Cú pháp:

function tenham(&$bien){
          //code
}

Ở đây sự khác nhau chính là dấu &. Đây chính là cú pháp trong PHP để ta truyền biến vào ở dạng tham chiếu

Ví dụ:

<?php 
$x = 1;
function tang(&$x)
{
    $x = $x + 1;
    return $x;
}
echo tang($x);
echo $x;
 ?>

5. Kiểm tra tồn tại của hàm

Trong một dự án có thể số lượng hàm qua lớn dễ dẫn đến việc trùng lặp hàm. Vì vậy mà ta có cú pháp để kiểm tra sự tồn tại của hàm

Cú pháp:

function_exists('tenham');

‘tenham’ là tên của hàm mà ta muốn kiểm tra. Hàm này sẽ trả về True nếu hàm đã tồn tại và False nếu hàm chưa tồn tại.

6. Quy tắc và phạm vi của hàm

Khi ta khai báo trong phần thân của hàm A có thể gọi đến hàm B, hàm B có thể gọi đến hàm C… Đây là cách hàm gọi hàm. Ta có thể hiểu nôm na nó giống như vòng lặp lồng nhau vậy.

Thường thì người ta viết code PHP thì sẽ để hàm ở 1 file riêng, chương trình của chúng ta sẽ ở một file riêng và chỉ việc dùng luôn hàm đó. Tôi sẽ nói kỹ về vấn đề này ở bài sau.