Khởi tạo và gọi hàm trong PHP
PHP Tutorial | by
Khi bạn bắt đầu viết các chương trình PHP phức tạp hơn, bạn sẽ nhanh chóng nhận ra một vấn đề: nhiều đoạn mã có thể cần được thực thi lặp đi lặp lại ở nhiều nơi khác nhau. Việc sao chép và dán cùng một đoạn code hết lần này đến lần khác không chỉ khiến chương trình trở nên dài dòng, khó đọc mà còn rất dễ gây ra lỗi và cực kỳ tốn thời gian khi bạn cần sửa đổi hay nâng cấp.
Đây chính là lúc hàm (function) trở thành người bạn đồng hành không thể thiếu của mọi lập trình viên. Trong PHP, hàm cho phép bạn đóng gói một tập hợp các lệnh vào một "hộp công cụ" nhỏ có tên gọi riêng. Thay vì viết lại cùng một mã, bạn chỉ cần "gọi" tên cái hộp đó, và mọi thứ bên trong sẽ được thực thi. Hàm là xương sống của việc viết code sạch, dễ bảo trì và hiệu quả. Hãy cùng tìm hiểu cách bạn có thể tạo và sử dụng hàm để biến những đoạn mã lặp thành các khối chức năng tái sử dụng được, giúp chương trình của bạn mạnh mẽ và có tổ chức hơn rất nhiều!
Hàm là gì?
Hãy tưởng tượng bạn có một cuốn sách dạy nấu ăn. Thay vì mỗi lần muốn làm món Phở Bò lại phải viết lại toàn bộ các bước từ A đến Z, bạn chỉ cần tìm đến mục "Phở Bò" (tên món ăn), và ở đó đã có sẵn tất cả các bước chi tiết (công thức). Mỗi khi bạn muốn nấu Phở Bò, bạn chỉ việc đọc và làm theo công thức đó.
Trong lập trình PHP, hàm (function) cũng hoạt động theo một nguyên lý tương tự.
Hàm là một tập hợp các câu lệnh (hoặc đoạn mã) được gộp lại với nhau và được đặt cho một tên duy nhất. Khi bạn "gọi" cái tên đó trong chương trình của mình, tất cả các câu lệnh nằm bên trong hàm sẽ được thực thi theo thứ tự.
Nói cách khác, hàm là một khối mã có thể tái sử dụng. Bạn viết mã đó một lần, đặt cho nó một cái tên, và sau đó có thể chạy lại khối mã đó bất cứ khi nào bạn muốn chỉ bằng cách gọi tên hàm.
Ví dụ PHP cơ bản
Hãy cùng xem một ví dụ đơn giản về cách tạo và gọi một hàm trong PHP:
<?php // Bước 1: Định nghĩa (tạo) một hàm // Chúng ta đặt tên hàm là 'sayHello' // Hàm này có nhiệm vụ in ra một câu chào đơn giản function sayHello() { echo "Xin chào bạn, đây là hàm đầu tiên của tôi trong PHP!<br>"; echo "Hy vọng bạn thấy nó thú vị.<br>"; } // Sau khi định nghĩa, hàm chưa tự động chạy. // Nó giống như bạn đã viết xong công thức nấu ăn, nhưng chưa bắt đầu nấu. // Bước 2: Gọi (sử dụng) hàm // Để hàm chạy, chúng ta phải "gọi" tên của nó echo "--- Bắt đầu chương trình ---<br>"; sayHello(); // Dòng này sẽ làm cho các lệnh bên trong hàm sayHello() được thực thi echo "--- Tiếp tục chương trình sau khi gọi hàm lần 1 ---<br>"; sayHello(); // Chúng ta có thể gọi hàm này nhiều lần tùy thích echo "--- Chương trình kết thúc ---<br>"; /* Output của đoạn code trên sẽ là: --- Bắt đầu chương trình --- Xin chào bạn, đây là hàm đầu tiên của tôi trong PHP! Hy vọng bạn thấy nó thú vị. --- Tiếp tục chương trình sau khi gọi hàm lần 1 --- Xin chào bạn, đây là hàm đầu tiên của tôi trong PHP! Hy vọng bạn thấy nó thú vị. --- Chương trình kết thúc --- */ ?>
Giải thích ví dụ:
function sayHello() { ... }
: Đây là phần định nghĩa hàm.
-
function
là từ khóa bắt buộc để khai báo rằng bạn đang tạo một hàm. -
sayHello
là tên mà chúng ta đặt cho hàm này. -
()
là cặp dấu ngoặc đơn. Hiện tại nó trống rỗng, nghĩa là hàm này không cần bất kỳ thông tin đầu vào nào để hoạt động. -
{ ... }
là cặp dấu ngoặc nhọn, chứa thân hàm (body) – nơi bạn viết tất cả các câu lệnh PHP mà hàm sẽ thực hiện khi được gọi.
sayHello();
: Đây là phần gọi hàm.
-
Khi PHP gặp dòng này, nó sẽ tìm đến định nghĩa của hàm
sayHello()
, và thực thi tất cả các câu lệnh bên trong cặp dấu ngoặc nhọn{}
của hàm đó. -
Bạn có thể thấy rằng chúng ta đã gọi hàm
sayHello()
hai lần, và mỗi lần gọi, các dòngecho
bên trong hàm đều được thực thi lại. Điều này thể hiện khả năng tái sử dụng mã của hàm.
Như vậy, hàm giúp bạn tổ chức code một cách logic, dễ đọc và dễ quản lý hơn rất nhiều, đặc biệt là khi chương trình của bạn phát triển lớn mạnh.
Cách tạo hàm (Định Nghĩa Hàm) trong PHP
Tạo hàm, hay còn gọi là định nghĩa hàm, là bước đầu tiên để bạn đóng gói các đoạn mã có thể tái sử dụng. Nó giống như việc bạn viết ra một công thức mới trong cuốn sách nấu ăn của mình.
Cú Pháp Cơ Bản
Cú pháp để định nghĩa một hàm trong PHP khá đơn giản và dễ hiểu:
<?php function ten_ham() { // Các lệnh PHP mà hàm sẽ thực hiện khi được gọi // Đây là "thân hàm" hay "body" của hàm } ?>
Giải Thích Các Thành Phần
function
:
-
Đây là một từ khóa bắt buộc trong PHP. Khi PHP nhìn thấy từ khóa
function
, nó hiểu rằng bạn sắp khai báo một hàm mới. Bạn luôn phải bắt đầu định nghĩa hàm bằngfunction
.
ten_ham
:
-
Đây là tên mà bạn tự đặt cho hàm của mình. Tên này phải là duy nhất trong chương trình của bạn (trừ khi bạn dùng các tính năng nâng cao như namespace, nhưng tạm thời đừng bận tâm đến điều đó).
Quy tắc đặt tên hàm:
-
Phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới (
_
). -
Chỉ chứa các chữ cái (a-z, A-Z), số (0-9) và dấu gạch dưới (
_
). -
Không được chứa khoảng trắng hoặc các ký tự đặc biệt khác (như
!
,@
,#
,$
,%
, v.v.). -
Không phân biệt chữ hoa, chữ thường (ví dụ:
myFunction
vàMyFunction
được coi là cùng một hàm). Tuy nhiên, thực tiễn tốt nhất là nên dùng camelCase (ví dụ:tinhTongHaiSo
,layTenKhachHang
) để dễ đọc.
()
(Dấu ngoặc đơn):
-
Cặp dấu ngoặc đơn này là bắt buộc phải có sau tên hàm.
-
Hiện tại, chúng ta để trống, điều đó có nghĩa là hàm này không cần bất kỳ thông tin đầu vào nào để thực hiện công việc của nó. Sau này, chúng ta sẽ tìm hiểu về tham số (parameters), đó là các giá trị mà bạn có thể truyền vào bên trong cặp dấu ngoặc này để hàm làm việc với chúng.
{}
(Dấu ngoặc nhọn):
-
Cặp dấu ngoặc nhọn này định nghĩa thân hàm (body).
-
Tất cả các câu lệnh PHP mà bạn muốn hàm thực hiện khi nó được gọi sẽ được viết bên trong cặp dấu ngoặc nhọn này. Đây chính là "nội dung" của cái "hộp công cụ" mà bạn đang tạo ra.
Ví dụ Cơ Bản: Hàm sayHello()
Hãy tạo một hàm rất đơn giản có tên sayHello()
mà chỉ làm một việc là in ra một câu chào.
<?php // Định nghĩa hàm sayHello() // Hàm này không cần bất kỳ tham số nào (ngoặc đơn trống) // Thân hàm chứa các lệnh echo function sayHello() { echo "Xin chào bạn, rất vui được gặp!<br>"; echo "Đây là một hàm đơn giản.<br>"; } // Lưu ý: Sau khi định nghĩa, hàm chưa tự động chạy. // Nó chỉ là một "khuôn mẫu" hoặc "công thức" đã sẵn sàng để sử dụng. // Để hàm chạy, bạn phải "gọi" nó. (Phần này sẽ được trình bày chi tiết ở mục sau) echo "--- Chương trình bắt đầu ---<br>"; // Gọi hàm sayHello() để nó thực thi các lệnh bên trong nó sayHello(); echo "--- Chương trình tiếp tục sau khi hàm đã chạy ---<br>"; // Bạn có thể gọi hàm này nhiều lần nếu muốn sayHello(); echo "--- Chương trình kết thúc ---<br>"; /* Output của đoạn code trên sẽ là: --- Chương trình bắt đầu --- Xin chào bạn, rất vui được gặp! Đây là một hàm đơn giản. --- Chương trình tiếp tục sau khi hàm đã chạy --- Xin chào bạn, rất vui được gặp! Đây là một hàm đơn giản. --- Chương trình kết thúc --- */ ?>
Giải thích:
-
Chúng ta bắt đầu bằng từ khóa
function
, sau đó là tên hàmsayHello
, và cuối cùng là cặp dấu ngoặc đơn()
và cặp dấu ngoặc nhọn{}
. -
Bên trong dấu ngoặc nhọn, chúng ta đặt hai câu lệnh
echo
. Đây là những gì hàm này sẽ làm mỗi khi nó được gọi. -
Việc định nghĩa hàm chỉ là tạo ra nó. Để hàm thực sự làm việc, bạn cần phải gọi nó, như được minh họa bằng các dòng
sayHello();
sau phần định nghĩa.
Như vậy, việc định nghĩa hàm là nền tảng để bạn có thể tổ chức code của mình thành các khối chức năng độc lập, dễ quản lý và tái sử dụng.
Cách gọi hàm (Sử Dụng Hàm) trong PHP
Sau khi đã định nghĩa một hàm, nó giống như bạn đã viết xong một công thức nấu ăn. Công thức đó chỉ có tác dụng khi bạn thực sự bắt tay vào nấu. Tương tự, để một hàm làm công việc của nó, bạn phải gọi (call) nó.
Để hàm chạy, bạn cần "gọi" nó bằng cách viết tên hàm, theo sau là cặp dấu ngoặc đơn ()
, và kết thúc bằng dấu chấm phẩy ;
.
Cú Pháp Cơ Bản
Cú pháp để gọi một hàm rất đơn giản:
<?php ten_ham(); // Thay 'ten_ham' bằng tên hàm bạn muốn gọi ?>
Ví dụ Cơ Bản: Gọi hàm sayHello()
Hãy sử dụng lại hàm sayHello()
mà chúng ta đã định nghĩa ở phần trước để minh họa cách gọi hàm.
<?php // Bước 1: Định nghĩa hàm (như đã học ở phần III) function sayHello() { echo "Xin chào từ hàm sayHello!<br>"; echo "Hàm này đang thực thi các lệnh của nó.<br>"; } echo "--- Chương trình bắt đầu ---<br>"; // Bước 2: Gọi hàm lần thứ nhất // Dòng này sẽ làm cho các lệnh bên trong hàm sayHello() được thực thi sayHello(); echo "--- Chương trình tiếp tục sau khi gọi hàm lần 1 ---<br>"; // Bước 3: Gọi hàm lần thứ hai // Bạn có thể gọi hàm bao nhiêu lần tùy thích ở bất cứ đâu trong code sayHello(); echo "--- Chương trình kết thúc ---<br>"; /* Output của đoạn code trên sẽ là: --- Chương trình bắt đầu --- Xin chào từ hàm sayHello! Hàm này đang thực thi các lệnh của nó. --- Chương trình tiếp tục sau khi gọi hàm lần 1 --- Xin chào từ hàm sayHello! Hàm này đang thực thi các lệnh của nó. --- Chương trình kết thúc --- */ ?>
Giải thích:
-
Định nghĩa trước, gọi sau: Điều quan trọng là hàm phải được định nghĩa trước khi bạn cố gắng gọi nó. PHP đọc mã theo thứ tự từ trên xuống dưới. Nếu bạn cố gắng gọi một hàm mà nó chưa được định nghĩa, PHP sẽ báo lỗi. (Trong ví dụ này, hàm
sayHello
được định nghĩa ở đầu tệp, nên nó luôn sẵn sàng để gọi). -
sayHello();
: Mỗi khi dòng này xuất hiện, PHP sẽ tạm dừng việc thực thi mã ở vị trí hiện tại, "nhảy" đến phần định nghĩa của hàmsayHello()
, thực thi tất cả các lệnh bên trong thân hàm đó. -
Tiếp tục thực thi: Sau khi tất cả các lệnh trong hàm đã chạy xong, PHP sẽ "quay trở lại" và tiếp tục thực thi các lệnh ngay sau dòng gọi hàm.
-
Gọi nhiều lần: Như bạn thấy, chúng ta đã gọi
sayHello();
hai lần. Điều này minh họa một trong những lợi ích lớn nhất của hàm: khả năng tái sử dụng mã. Thay vì phải viết lại hai lần các dòngecho
, chúng ta chỉ cần viết chúng một lần trong hàm và gọi hàm đó bất cứ khi nào cần.
Việc hiểu rõ cách định nghĩa và gọi hàm là nền tảng vững chắc để bạn xây dựng các chương trình PHP có cấu trúc, hiệu quả và dễ bảo trì.
Hàm với Tham số (Parameters) trong PHP
Cho đến nay, các hàm chúng ta đã học đều thực hiện cùng một công việc mỗi khi được gọi. Nhưng điều gì sẽ xảy ra nếu bạn muốn hàm làm việc linh hoạt hơn, với dữ liệu khác nhau mỗi lần? Đây chính là lúc tham số (parameters) phát huy tác dụng.
Khái niệm: "Nguyên liệu" Cho Hàm
Hãy quay lại ví dụ về công thức nấu ăn. Để nấu món Phở Bò, bạn cần các nguyên liệu như thịt bò, bánh phở, gia vị... Bạn không thể nấu Phở Bò mà không có những nguyên liệu đó.
Tương tự, tham số là những giá trị mà bạn có thể truyền vào cho hàm khi gọi nó. Hàm sẽ sử dụng những giá trị này để thực hiện công việc của mình. Các tham số hoạt động như các biến tạm thời bên trong hàm, chỉ tồn tại trong suốt quá trình hàm được thực thi.
Cú Pháp Định Nghĩa Hàm có Tham số
Khi định nghĩa hàm, bạn khai báo các tham số bên trong cặp dấu ngoặc đơn ()
sau tên hàm. Mỗi tham số được ngăn cách bởi dấu phẩy.
<?php function ten_ham_co_tham_so($tham_so1, $tham_so2, ...) { // Bên trong thân hàm, bạn có thể sử dụng các biến $tham_so1, $tham_so2... // giống như các biến thông thường để thực hiện các phép tính hoặc hiển thị. } ?>
-
$tham_so1
,$tham_so2
, ...: Đây là tên các tham số. Chúng phải tuân theo quy tắc đặt tên biến trong PHP (bắt đầu bằng$
, không dấu, không khoảng trắng, v.v.).
Cú Pháp Gọi Hàm có Tham số
Khi gọi hàm có tham số, bạn cần truyền các giá trị (gọi là đối số - arguments) vào bên trong cặp dấu ngoặc đơn ()
theo đúng thứ tự mà các tham số đã được định nghĩa.
<?php ten_ham_co_tham_so(gia_tri_cho_tham_so1, gia_tri_cho_tham_so2, ...); ?>
-
gia_tri_cho_tham_so1
,gia_tri_cho_tham_so2
, ...: Đây là các giá trị thực tế (có thể là số, chuỗi, biến, biểu thức) mà bạn muốn hàm làm việc với chúng.
Ví dụ 1: Hàm greetUser($name) - Chào hỏi một người cụ thể
Chúng ta muốn một hàm chào hỏi, nhưng tên của người được chào có thể thay đổi.
<?php // Định nghĩa hàm greetUser với một tham số là $name function greetUser($name) { echo "Chào bạn, " . $name . "! Chúc một ngày tốt lành.<br>"; } echo "<h3>Hàm chào hỏi với tham số:</h3>"; // Gọi hàm và truyền vào các tên khác nhau greetUser("Lan"); // Giá trị "Lan" sẽ được truyền vào tham số $name greetUser("Tùng"); // Giá trị "Tùng" sẽ được truyền vào tham số $name $user = "Mai"; greetUser($user); // Có thể truyền vào một biến /* Output: Hàm chào hỏi với tham số: Chào bạn, Lan! Chúc một ngày tốt lành. Chào bạn, Tùng! Chúc một ngày tốt lành. Chào bạn, Mai! Chúc một ngày tốt lành. */ ?>
Giải thích:
-
Hàm
greetUser
được định nghĩa với tham số$name
. -
Khi bạn gọi
greetUser("Lan")
, chuỗi"Lan"
được gán cho$name
bên trong hàm, và hàm in ra "Chào bạn, Lan!...". -
Khi bạn gọi
greetUser("Tùng")
, chuỗi"Tùng"
được gán cho$name
, và hàm in ra "Chào bạn, Tùng!...". -
Giá trị của tham số sẽ thay đổi tùy theo giá trị bạn truyền vào khi gọi hàm, giúp hàm thực hiện cùng một hành động nhưng với dữ liệu khác nhau.
Ví dụ 2: Hàm addNumbers($num1, $num2) - Tính tổng hai số
Chúng ta muốn một hàm tính tổng của hai số bất kỳ. Hàm này sẽ cần hai "nguyên liệu" là hai con số.
Hàm Trả Về Giá Trị (Return Values) trong PHP
Cho đến giờ, các hàm của chúng ta chủ yếu in thông báo trực tiếp ra màn hình. Nhưng thường thì, bạn muốn hàm thực hiện một phép tính hoặc một công việc nào đó và sau đó trả lại kết quả để bạn có thể sử dụng nó ở nơi khác trong chương trình. Đây chính là mục đích của việc trả về giá trị.
Khái niệm: "Sản Phẩm Hoàn Thiện" Của Hàm
Hãy hình dung lại ví dụ công thức nấu ăn. Khi bạn nấu xong món ăn (hàm đã thực hiện xong công việc), bạn sẽ nhận được một món ăn hoàn chỉnh (kết quả trả về). Bạn có thể ăn nó, phục vụ nó cho người khác, hoặc thậm chí dùng nó làm nguyên liệu cho một món ăn phức tạp hơn.
Trong lập trình, khi một hàm hoàn thành công việc của nó, nó có thể "trả lại" một giá trị (có thể là một số, một chuỗi, một mảng, một đối tượng, v.v.) về nơi đã gọi nó. Giá trị này có thể được lưu vào một biến, được hiển thị ra màn hình, hoặc được sử dụng trong các phép tính khác.
Từ khóa return
Để một hàm trả về giá trị, bạn sử dụng từ khóa return
.
Cú pháp: return biểu_thức_hoặc_biến;
Chức năng: Khi PHP gặp lệnh return
, nó sẽ thực hiện hai việc:
-
Dừng ngay lập tức việc thực thi hàm. Bất kỳ dòng code nào sau
return
trong hàm sẽ không được chạy. -
Trả lại giá trị theo sau
return
về nơi hàm đã được gọi.
Cú Pháp Định Nghĩa Hàm Trả Về Giá Trị
<?php function ten_ham_tra_ve($tham_so1, $tham_so2) { // Các lệnh xử lý bên trong hàm $ket_qua_tinh_toan = $tham_so1 + $tham_so2; // Ví dụ: thực hiện tính toán return $ket_qua_tinh_toan; // Trả về giá trị của biến $ket_qua_tinh_toan } ?>
Ví dụ 1: Hàm calculateSum($a, $b) - Tính tổng và trả về kết quả
Chúng ta muốn một hàm tính tổng của hai số và sau đó cho chúng ta biết tổng đó là bao nhiêu, thay vì chỉ in ra màn hình.
<?php // Định nghĩa hàm calculateSum nhận hai số và TRẢ VỀ tổng của chúng function calculateSum($a, $b) { $sum = $a + $b; return $sum; // Trả về giá trị của biến $sum echo "Dòng này sẽ không bao giờ được thực thi!"; // Code sau return sẽ không chạy } echo "<h3>Hàm trả về tổng của hai số:</h3>"; // Gọi hàm và lưu kết quả trả về vào một biến $result1 = calculateSum(10, 20); echo "Tổng của 10 và 20 là: " . $result1 . "<br>"; // Sử dụng biến $result1 // Gọi hàm trực tiếp trong một phép tính hoặc câu lệnh echo echo "Tổng của 5 và 15 là: " . calculateSum(5, 15) . "<br>"; $x = 100; $y = 50; $finalResult = calculateSum($x, $y) * 2; // Sử dụng kết quả trả về trong một biểu thức echo "Tổng của " . $x . " và " . $y . " nhân đôi là: " . $finalResult . "<br>"; /* Output: Hàm trả về tổng của hai số: Tổng của 10 và 20 là: 30 Tổng của 5 và 15 là: 20 Tổng của 100 và 50 nhân đôi là: 300 */ ?>
Giải thích:
-
Khi
calculateSum(10, 20)
được gọi, hàm thực hiện phép cộng và$sum
trở thành 30. Lệnhreturn $sum;
trả về giá trị 30 cho nơi gọi hàm. -
Giá trị 30 này sau đó được gán vào biến
$result1
. -
Bạn có thể trực tiếp sử dụng kết quả trả về của hàm trong các biểu thức hoặc câu lệnh khác, như
calculateSum(5, 15)
hoặccalculateSum($x, $y) * 2
.
Ví dụ 2: Hàm getFullName($firstName, $lastName) - Ghép tên và trả về tên đầy đủ
Bạn muốn một hàm nhận tên và họ, sau đó ghép chúng lại thành tên đầy đủ.
<?php // Định nghĩa hàm getFullName nhận tên và họ, TRẢ VỀ tên đầy đủ function getFullName($firstName, $lastName) { $fullName = $firstName . " " . $lastName; // Ghép tên và họ return $fullName; // Trả về chuỗi tên đầy đủ } echo "<h3>Hàm trả về tên đầy đủ:</h3>"; // Lưu kết quả trả về vào biến $myFullName = getFullName("Nguyễn", "Văn A"); echo "Tên đầy đủ của tôi là: " . $myFullName . "<br>"; // Sử dụng trực tiếp kết quả trả về echo "Tên của bạn là: " . getFullName("Lê", "Thị B") . "<br>"; /* Output: Hàm trả về tên đầy đủ: Tên đầy đủ của tôi là: Nguyễn Văn A Tên của bạn là: Lê Thị B */ ?>
Kết bài
Qua hành trình khám phá này, chúng ta đã thấy rằng việc tạo và gọi hàm là một trong những kỹ thuật cơ bản nhưng mạnh mẽ nhất trong lập trình PHP. Hàm cho phép bạn đóng gói các đoạn mã có chức năng cụ thể thành những khối riêng biệt, có thể tái sử dụng nhiều lần. Điều này không chỉ giúp code của bạn trở nên ngắn gọn, dễ đọc mà còn cực kỳ dễ quản lý và bảo trì.
Chúng ta đã tìm hiểu cách định nghĩa một hàm đơn giản, cách "kích hoạt" nó bằng việc gọi tên, và sau đó nâng cấp chúng với tham số để hàm có thể làm việc với dữ liệu linh hoạt hơn. Đặc biệt, khả năng trả về giá trị biến hàm từ một đoạn mã thực thi đơn thuần thành một "nhà máy" sản xuất ra kết quả, mở ra vô vàn khả năng cho việc xây dựng các logic phức tạp. Cuối cùng, việc hiểu về phạm vi biến đảm bảo rằng các hàm của bạn hoạt động độc lập và tránh được những lỗi không mong muốn.