Hàm (function) là một đoạn chương trình được đặt tên, có đầu vào và đầu ra. Hàm có chức năng giải quyết một số vấn đề chuyên biệt cho chương trình. Hàm có thể được gọi nhiều lần (tái sử dụng) với các tham số khác nhau. Có 2 loại function trong PHP là:
- Các hàm được xây dựng sẵn (built-in function): PHP có hơn 1000 built-in function. Đây là ưu điểm lớn của PHP, giúp việc lập trình dễ dàng hơn.
- Các hàm do lập trình viên xây dựng (user-defined function)
Trong bài này, chúng ta sẽ tìm hiểu cách xây dựng và sử dụng các hàm user-defined trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
1. Định nghĩa một user-defined function trong PHP
Để định nghĩa một hàm trong PHP, chúng ta sử dụng từ khóa function:
function functionName() {
//code to be executed
}
Ví dụ:
<?php
function welcome() {
echo "Welcome to gochocit.com!";
}
// call function
welcome();
?>
Lưu ý: Tên hàm phải bắt đầu bằng 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.
2. Các tham số (parameters) của hàm trong PHP
Một hàm trong PHP có thể có các tham số dùng để truyền giá trị vào hàm khi gọi hàm. Một hàm có thể có nhiều tham số, mỗi tham số cách nhau bởi dấu phẩy ,. Ví dụ:
<?php
function welcome($msg, $domainname) {
echo $msg.$domainname."!<br>";
}
// call function
welcome("Welcome to ", "gochocit.com");
welcome("Hi all, this website is ", "google.com");
?>
2.1. Kiểu dữ liệu của tham số trong function
Các tham số trong PHP có thể không cần phải chỉ định kiểu dữ liệu. Khi gọi hàm và truyền giá trị cho hàm, PHP sẽ tự động xác định kiểu dữ liệu cho các đối số dựa vào giá trị của nó. Ví dụ:
<?php
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, "15 days");
?>
Kết quả
Warning: A non-numeric value encountered in C:\xampp\htdocs\gochocit\index.php on line 3
20
Trong ví dụ trên, chúng ta có thể truyền cho hàm addNumbers()
một giá trị chuỗi (string) để cộng với một số nguyên. Hàm addNumbers()
vẫn thực thi được và chỉ xuất ra một Warning.
Từ PHP 7, chúng ta có thể chỉ định kiểu dữ liệu của các tham số trong hàm với từ khóa strict. Nếu không truyền vào kiểu dữ liệu phù hợp khi gọi hàm thì sẽ gây ra lỗi.
<?php
// strict requirement
declare(strict_types=1);
function addNumbers(int $a, int $b) {
return $a + $b;
}
echo addNumbers(5, "15 days");
?>
Kết quả
Fatal error: Uncaught TypeError: addNumbers(): Argument #2 ($b) must be of type int, string given, called in C:\xampp\htdocs\gochocit\index.php on line 7 and defined in C:\xampp\htdocs\gochocit\index.php:4 Stack trace: #0 C:\xampp\htdocs\gochocit\index.php(7): addNumbers(5, '15 days') #1 {main} thrown in C:\xampp\htdocs\gochocit\index.php on line 4
Khai báo kiểu dữ liệu cho tham số và sử dụng strict để bắt buộc truyền dữ liệu phù hợp khi gọi hàm. Trong ví dụ trên, chúng ta truyền một chuỗi (string) vào cho hàm addNumbers()
thì sẽ gây ra lỗi.
2.2. Giá trị mặc định của tham số trong function
Những tham số của function có thể được gán giá trị mặc định. Khi gọi hàm mà không truyền đối số thì function sẽ nhận giá trị mặc định làm đối số.
<?php
function showNumberPost($number = 100) {
echo "Number of posts: ".$number."<br>";
}
showNumberPost(125);
//using default value of 100
showNumberPost();
showNumberPost(99);
?>
Kết quả
Number of posts: 125
Number of posts: 100
Number of posts: 99
Nếu function có nhiều tham số thì các tham số có giá trị mặc định bắt buộc nằm bên phải của những tham số không có giá trị mặc định. Ví dụ, định nghĩa hàm như bên dưới sẽ hợp lệ.
<?php
function showInfo($name, $age=20) {
echo "Name: ".$name.", age: ".$age;
}
showInfo("John");
?>
Còn ví dụ dưới đây là một cách định nghĩa hàm sẽ gây ra lỗi khi gọi hàm.
<?php
function showInfo($name="John", $age) {
echo "Name: ".$name.", age: ".$age;
}
//Fatal error: Uncaught ArgumentCountError:
//Too few arguments to function showInfo()
showInfo(50);
?>
3. Giá trị trả về của hàm (return value) trong PHP
PHP cũng cho phép một hàm có kiểu dữ liệu trả về. Kiểu dữ liệu trả về của một hàm được chỉ định sau dấu hai chấm : được đặt sau khai báo tham số.
<?php
// float is return datatype
function addNumbers(float $a, float $b) : float {
return $a + $b;
}
// output 6.4
echo addNumbers(1.2, 5.2)."<br>";
// int is return datatype
function addIntegerNumbers(int $a, int $b) : int {
return $a + $b;
}
// output 6
echo addIntegerNumbers(1, 5);
?>
4. Truyền tham chiếu cho hàm trong PHP
Khi truyền các đối số cho hàm trong PHP thì đó thường là truyền tham trị (passed by value). Có nghĩa là biến được truyền vào hàm không thể thay đổi được. Nhưng PHP cũng hỗ trợ truyền tham chiếu (passed by reference) khi gọi hàm. Lúc này, các biến được truyền vào hàm có thể bị thay đổi sau khi ra khỏi hàm. Để truyền tham chiếu trong PHP, chúng ta sử dụng toán tử &
.
<?php
// passed by value
function add_one($value) {
$value += 1;
}
// passed by reference
function add_two(&$value){
$value += 2;
}
$x = 1;
echo 'Value of $x = '.$x."<br>";
add_one($x);
echo 'When passed by value, $x = '.$x."<br>";
add_two($x);
echo 'When passed by reference, $x = '.$x;
?>
Kết quả
Value of $x = 1
When passed by value, $x = 1
When passed by reference, $x = 3
Rõ ràng, khi truyền tham trị thì $x không đổi nhưng truyền tham chiếu thì $x thay đổi.