Hàm (Function) trong PHP và cách sử dụng
Lập trình PHP

Hàm (Function) trong PHP và cách sử dụng

<?xml encoding="utf-8" ?>

Chào mừng bạn đã quay trở lại với series học PHP tại TheGioiPHP.com! Trong các bài học trước, chúng ta đã nắm vững những viên gạch nền tảng như biến, kiểu dữ liệu, toán tử và vòng lặp. Bạn đã có thể viết được những đoạn script để thực hiện các tác vụ đơn giản.

Tuy nhiên, khi dự án của bạn lớn dần lên, bạn sẽ nhận ra một vấn đề: sự lặp lại. Bạn có thể phải viết đi viết lại cùng một đoạn code ở nhiều nơi khác nhau. Điều này không chỉ tốn thời gian mà còn khiến code của bạn trở nên khó đọc, khó bảo trì và dễ phát sinh lỗi.

Vậy, tại sao nên dùng hàm trong PHP? Câu trả lời nằm ở Hàm (Function) - một khái niệm nền tảng sẽ thay đổi hoàn toàn cách bạn tư duy và viết code. Hàm là giải pháp tối ưu cho việc tái sử dụng code, giúp chương trình của bạn trở nên gọn gàng, có tổ chức và chuyên nghiệp hơn rất nhiều.

Trong bài viết này, chúng ta sẽ cùng nhau mổ xẻ mọi thứ về hàm trong PHP: từ định nghĩa, cách tạo, cách truyền dữ liệu vào và nhận kết quả trả về. Hãy sẵn sàng để nâng cấp kỹ năng lập trình của bạn lên một tầm cao mới!

Phần 1: Hàm trong PHP là gì?

Hãy tưởng tượng bạn là một đầu bếp. Mỗi ngày, bạn đều phải thực hiện công việc "Thái hành tây". Thay vì mỗi lần cần, bạn lại lấy dao, thớt, hành tây ra và thực hiện lại từ đầu toàn bộ quy trình, bạn có thể tạo ra một "công thức" có tên là thaiHanhTay(). Bất cứ khi nào cần, bạn chỉ cần gọi tên công thức đó ra và hành tây sẽ được thái xong.

Trong lập trình, hàm (function) cũng hoạt động tương tự.

Hàm trong PHP là một khối code được đặt tên, được thiết kế để thực hiện một nhiệm vụ cụ thể. Khối code này chỉ chạy khi nó được "gọi" đến.

Lợi ích vàng của việc sử dụng hàm:

  • Tái sử dụng code (Reusability): Bạn chỉ cần viết một hàm một lần và có thể gọi nó ở 10, 20, hay 100 nơi khác nhau. Đây là nguyên tắc DRY (Don't Repeat Yourself) - Đừng lặp lại chính mình.
  • Tổ chức code (Organization): Thay vì viết một file PHP dài hàng ngàn dòng, bạn có thể chia nhỏ logic thành các hàm riêng biệt, mỗi hàm đảm nhận một chức năng (ví dụ: ketNoiDatabase()layDuLieuNguoiDung()hienThiSanPham()). Điều này làm cho code cực kỳ dễ đọc và dễ hiểu.
  • Dễ bảo trì và gỡ lỗi (Maintainability & Debugging): Khi có lỗi xảy ra, bạn biết chính xác cần phải kiểm tra ở hàm nào. Khi cần thay đổi một logic, bạn chỉ cần sửa ở một nơi duy nhất là trong hàm đó.

Phần 2: Cách tạo và gọi hàm trong PHP

Bây giờ, hãy cùng đi vào phần thực hành. Cú pháp để tạo và sử dụng một hàm rất đơn giản.

1. Định nghĩa một hàm (Defining a Function)

Để tạo một hàm, chúng ta sử dụng từ khóa function, theo sau là tên hàm và cặp dấu ngoặc tròn (). Toàn bộ code của hàm sẽ được đặt bên trong cặp dấu ngoặc nhọn {}.

Cú pháp cơ bản:

function tenHam() {
    // Code để thực thi ở đây
}

Quy ước đặt tên hàm:

  • Tên hàm nên bắt đầu bằng một chữ cái hoặc dấu gạch dưới _.
  • Tên hàm không phân biệt chữ hoa chữ thường (nhưng tốt nhất nên viết nhất quán).
  • Quan trọng nhất: Tên hàm nên mang tính mô tả, thể hiện rõ chức năng mà nó thực hiện. Quy ước phổ biến là dùng kiểu camelCase (viết thường từ đầu tiên, viết hoa chữ cái đầu của các từ tiếp theo), ví dụ: hienThiLoiChaotinhTongHaiSo.

Ví dụ về hàm đơn giản nhất:

Hãy tạo một hàm có chức năng in ra một lời chào.

<?php
// Định nghĩa hàm
function hienThiLoiChao() {
    echo "Chào mừng bạn đến với TheGioiPHP.com!";
}
?>

Khi bạn lưu và chạy file này, sẽ không có gì xảy ra cả! Đó là vì chúng ta mới chỉ "định nghĩa" công thức, chứ chưa "sử dụng" nó.

2. Gọi một hàm (Calling a Function)

Để thực thi code bên trong một hàm, chúng ta cần gọi hàm bằng cách viết tên của nó, theo sau là cặp dấu ngoặc tròn ().

<?php
// Định nghĩa hàm
function hienThiLoiChao() {
    echo "Chào mừng bạn đến với TheGioiPHP.com!<br>";
}

// Gọi hàm lần thứ nhất
echo "Lần gọi 1: ";
hienThiLoiChao();

// Gọi hàm lần thứ hai
echo "Lần gọi 2: ";
hienThiLoiChao();

// Gọi hàm lần thứ ba
echo "Lần gọi 3: ";
hienThiLoiChao();
?>
 
 

Phần 3: Truyền dữ liệu vào hàm (Tham số & Đối số)

Hàm hienThiLoiChao ở trên khá hữu ích, nhưng nó hơi cứng nhắc vì lúc nào cũng chỉ in ra một câu chào duy nhất. Sẽ tốt hơn nếu chúng ta có thể tạo ra một hàm chào mừng một người dùng với tên cụ thể, phải không?

Để làm được điều đó, chúng ta cần truyền dữ liệu từ bên ngoài vào bên trong hàm. Đây là lúc tham số (parameters) và đối số (arguments) xuất hiện.

  • Tham số (Parameter): Là một biến được liệt kê bên trong cặp dấu ngoặc tròn () khi bạn định nghĩa hàm. Nó hoạt động như một "biến giữ chỗ" cho dữ liệu sẽ được truyền vào.
  • Đối số (Argument): Là giá trị thực tế mà bạn truyền vào cho các tham số đó khi bạn gọi hàm.

Cú pháp truyền tham số vào hàm trong PHP:

function tenHam($thamSo1, $thamSo2, ...) {
    // Sử dụng $thamSo1, $thamSo2 ở đây
}

Ví dụ 1: Hàm chào mừng với tên cụ thể

<?php
// $ten là một tham số
function chaoMung($ten) {
    echo "Xin chào, " . $ten . "!<br>";
}

// "Tuấn" và "Lan" là các đối số
chaoMung("Tuấn");
chaoMung("Lan");
?>

Ví dụ 2: Hàm tính tổng hai số

Một hàm có thể nhận nhiều tham số, ngăn cách nhau bởi dấu phẩy.

<?php
function tinhTong($so1, $so2) {
    $tong = $so1 + $so2;
    echo "Tổng của " . $so1 . " và " . $so2 . " là: " . $tong;
}

tinhTong(5, 10); // Kết quả: Tổng của 5 và 10 là: 15
?>

Giá trị mặc định của tham số

Làm thế nào để gán giá trị mặc định cho tham số trong PHP? Đôi khi, bạn muốn một tham số có giá trị mặc định nếu người dùng không truyền đối số cho nó khi gọi hàm. Bạn có thể làm điều này bằng cách sử dụng toán tử gán =.

<?php
function hienThiThongDiep($thongDiep = "Đây là thông điệp mặc định.") {
    echo $thongDiep . "<br>";
}

hienThiThongDiep("Chào bạn!"); // In ra: Chào bạn!
hienThiThongDiep();           // In ra: Đây là thông điệp mặc định.
?>

Phần 4: Nhận kết quả từ hàm (Lệnh return)

Các hàm chúng ta viết ở trên đều thực hiện một hành động là echo ra màn hình. Nhưng trong thực tế, chúng ta thường muốn một hàm thực hiện một phép tính toán và trả về kết quả để chúng ta có thể sử dụng kết quả đó cho các công việc khác.

Để làm điều này, chúng ta sử dụng lệnh return trong PHP.

Khi gặp lệnh return, hàm sẽ ngay lập tức dừng việc thực thi và "gửi trả" giá trị theo sau return về nơi mà nó được gọi.

Cú pháp hàm trả về giá trị trong PHP:

function tenHam($thamSo) {
    // Xử lý logic...
    return $ketQua;
}

Ví dụ: Viết lại hàm tinhTong để trả về kết quả

<?php
function tinhTong($so1, $so2) {
    $tong = $so1 + $so2;
    return $tong; // Trả về kết quả, không echo
}

// Gọi hàm và lưu kết quả trả về vào một biến
$ketQuaPhepTinh = tinhTong(8, 12);

echo "Kết quả của phép tính là: " . $ketQuaPhepTinh; // In ra: Kết quả của phép tính là: 20

// Bạn có thể sử dụng kết quả này cho các phép tính khác
$ketQuaCuoiCung = $ketQuaPhepTinh * 2;
echo "<br>Kết quả cuối cùng là: " . $ketQuaCuoiCung; // In ra: Kết quả cuối cùng là: 40
?>

Một hàm chỉ có thể return về một giá trị duy nhất. Nếu bạn muốn trả về nhiều giá trị, bạn có thể trả về một mảng (chúng ta sẽ học ở bài sau).


Phần 5: Type Hinting & Return Type - Giúp code chặt chẽ hơn

PHP là một ngôn ngữ kiểu lỏng, nghĩa là nó không bắt buộc bạn phải khai báo kiểu dữ liệu cho biến hay tham số. Tuy nhiên, để code trở nên rõ ràng, dễ hiểu và ít lỗi hơn, các phiên bản PHP hiện đại khuyến khích việc sử dụng Type Hinting (khai báo kiểu dữ liệu).

1. Khai báo kiểu cho Tham số (Parameter Type Hinting)

Bạn có thể chỉ định kiểu dữ liệu mà một tham số phải nhận (ví dụ: intstringfloatboolarray).

<?php
// Bật chế độ kiểm tra kiểu nghiêm ngặt (nên đặt ở đầu file)
declare(strict_types=1);

// Hàm này chỉ chấp nhận 2 tham số là số nguyên (int)
function tinhTongNghiemNgat(int $so1, int $so2) {
    return $so1 + $so2;
}

echo tinhTongNghiemNgat(5, 10); // Hoạt động bình thường

// Dòng sau sẽ gây ra lỗi nghiêm trọng (Fatal error)
// echo tinhTongNghiemNgat(5, "10 chuoi");
?>

2. Khai báo kiểu cho giá trị trả về (Return Type Declaration)

Bạn cũng có thể chỉ định kiểu dữ liệu mà hàm sẽ return về.

<?php
declare(strict_types=1);

// Hàm này nhận 2 số nguyên và BẮT BUỘC phải trả về một số nguyên
function tinhTongNghiemNgat(int $so1, int $so2): int {
    return $so1 + $so2;
}

// Hàm sau sẽ gây lỗi vì nó trả về float trong khi khai báo là int
function phepTinhLoi(int $so1, int $so2): int {
    return ($so1 + $so2) / 2;
}
?>

Việc sử dụng Type Hinting là một best practice (thực hành tốt) trong lập trình PHP hiện đại.

Phần 6: Các hàm có sẵn trong PHP (Built-in Functions)

Điều tuyệt vời là bạn không phải tự viết mọi hàm. PHP cung cấp sẵn cho chúng ta một thư viện khổng lồ với hàng ngàn hàm được xây dựng sẵn để xử lý hầu hết mọi tác vụ phổ biến. Việc của bạn là học cách sử dụng chúng.

Dưới đây là một vài hàm có sẵn trong PHP mà bạn sẽ sử dụng hàng ngày:

Các hàm xử lý chuỗi (String Functions)

  • strlen($chuoi): Trả về độ dài của một chuỗi.
  • str_replace($tim, $thay_the, $chuoi): Tìm và thay thế một chuỗi con.
  • strtolower($chuoi): Chuyển chuỗi thành chữ thường.
  • strtoupper($chuoi): Chuyển chuỗi thành chữ hoa.
  • ucfirst($chuoi): Viết hoa ký tự đầu tiên của chuỗi.

Ví dụ:

<?php
$cauNoi = "hoc lap trinh php rat vui!";
echo strlen($cauNoi); // In ra: 26
echo "<br>";
echo str_replace("vui", "tuyet voi", $cauNoi); // In ra: hoc lap trinh php rat tuyet voi!
echo "<br>";
echo ucfirst($cauNoi); // In ra: Hoc lap trinh php rat vui!
?>

Các hàm xử lý mảng (Array Functions)

  • count($mang): Đếm số phần tử trong mảng.
  • sort($mang): Sắp xếp mảng theo thứ tự tăng dần.
  • in_array($gia_tri, $mang): Kiểm tra xem một giá trị có tồn tại trong mảng hay không.
  • implode($ky_tu_noi, $mang): Nối các phần tử của mảng thành một chuỗi.

Các hàm toán học (Math Functions)

  • rand($min, $max): Tạo một số nguyên ngẫu nhiên.
  • max($so1, $so2, ...): Trả về số lớn nhất.
  • min($so1, $so2, ...): Trả về số nhỏ nhất.
  • round($so_thuc): Làm tròn một số thực.

Kết luận

Chúng ta vừa cùng nhau đi qua một hành trình chi tiết về hàm (function) trong PHP. Đây là một khái niệm không hề khó, nhưng sức mạnh của nó là vô cùng to lớn. Hãy cùng tổng kết lại những điểm chính:

  • Hàm là một khối code được đặt tên, giúp tái sử dụng và tổ chức code.
  • Sử dụng function tenHam() {} để định nghĩa và tenHam(); để gọi hàm.
  • Dùng tham số để truyền dữ liệu vào hàm và lệnh return để nhận kết quả trả về.
  • Sử dụng Type Hinting để giúp code của bạn trở nên chặt chẽ và an toàn hơn.
  • Đừng quên tận dụng kho tàng hàm có sẵn khổng lồ của PHP.

Cách duy nhất để thực sự làm chủ hàm là thực hành. Hãy thử thách bản thân: Viết một hàm kiểm tra xem một năm có phải là năm nhuận hay không. Viết một hàm nhận vào một mảng số và trả về số lớn nhất trong mảng đó.

Trong bài học tiếp theo, chúng ta sẽ tìm hiểu sâu hơn về một kiểu dữ liệu cực kỳ mạnh mẽ mà chúng ta đã lướt qua: "Mảng (Array) trong PHP: Hướng dẫn toàn diện".

Kelvin Zeng

Senior Website Developer

👨‍💻 Senior PHP Developer, hiện đảm nhận vai trò Techlead. Tôi có kinh nghiệm làm việc trong môi trường công ty Nhật Bản, từng tham gia thiết kế tài liệu kỹ thuật (Basic Design, Detail Design) và lập kế hoạch dự án với vai trò như một Project Lead. Trong sự nghiệp, tôi đã tham gia xây dựng và triển khai nhiều hệ thống E-commerce cũng như làm việc với nhiều framework khác nhau. Ngoài lập trình, tôi quan tâm đến SEO, automation và marketing, đặc biệt yêu thích việc phát triển các công cụ giúp tối ưu công việc. Tôi luôn sẵn sàng chia sẻ kiến thức, đồng hành cùng đồng đội để nâng cao chuyên môn và đạt được những mục tiêu lớn hơn.