Hàm là một kiến thức cực kỳ quan trọng trong PHP, điểm mạnh nhất của PHP chính là hàm. PHP có hơn 1000 hàm đã được tích hợp sẵn, ngoài ra thì bạn có thể tự xây dựng cho mình những hàm riêng tuỳ theo dự án.

I. Hàm tích hợp sẵn trong PHP

Như đã nói ở trên thì PHP có hơn 1000 hàm đã được xây dựng sẵn, bạn hoàn toàn có thể sử dụng chúng cho chương trình của mình mà không cần phải mất công xây dựng. 

Để biết được các hàm tích hợp sẵn trong PHP là những hàm nào thì bạn có thể truy cập vào đây: Các hàm tích hợp sẵn trong PHP.

Bài viết bài mình sẽ hướng dẫn cách viết một hàm và cách sử dụng hàm trong PHP nhé.

II. Khái niệm hàm trong PHP

1. Hàm là gì?

Hàm đơn giản là một khối các câu lệnh dùng để sử dụng nhiều lần lặp lại trong một chương trình.

Một hàm sẽ không tự động thực thi được nếu như không được gọi.

2. Cách định nghĩa một hàm và cách gọi hàm

Cú pháp định nghĩa hàm như sau: 

function functionName() {
  // code thực thi
}

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.
  • Nên đặt tên hàm theo chức năng của nó để khỏi phải comment lại chức năng của hàm mà người khác đọc vẫn hiểu.

Ví dụ: Định nghĩa một hàm xuất ra màn hình "Hello Word" và gọi hàm đó.

function writeMsg() {
  echo "Hello world!";
}

writeMsg(); // Gọi hàm

3. Hàm có đối số

Khi xây dựng hàm có đối số bạn cần chú ý những điểm sau: 

  • Thông tin được chuyển đến hàm thông qua đối số.
  • Một hàm có thể có nhiều đối số
  • Mỗi đối số giống như một biến và được cách nhau bởi dấu phẩy ,

Ví dụ: Ta có một hàm tính tổng a và b, với a,b là số bất kỳ. Lúc này ta có thể xây dựng một hàm kèm theo 2 đối số a, b như sau:

function tinhTong($a, $b){
$total = $a + $b;
return $total;
}
// Gọi hàm ra kèm giá trị đối số
echo tinhTong(5,10);
echo tinhTong(2,3);
echo tinhTong(7,10);
echo tinhTong(8,3);

Trong ví dụ trên bạn sẽ thấy khi gán đối số chúng ta không cần khai báo kiểu dữ liệu, PHP sẽ tự định nghĩa kiểu dữ liệu phù hợp với đối số nhất rồi thực thi lệnh. Ví dụ cũng là hàm trên nhưng nếu như tôi truyền đối số b là một string thì PHP cũng sẽ tự động ép kiểu string về kiểu int để tính toán. Bạn chạy ví dụ sau đây để hiểu hơn.

function tinhTong($a, $b){
$total = $a + $b;
return $total;
}
// Gọi hàm ra kèm giá trị đối số, đối số b truyền string
echo tinhTong(5,"10 ngày");  // "10 ngày" được đổi thành int(10) và nó sẽ trả về kết quả là 15

Đấy là bạn chưa khai báo kiểu dữ liệu, vậy nếu như bạn đã khai báo kiểu dữ liệu thì sao? Trong trường hợp bạn đã khai báo kiểu dữ liệu thì PHP cũng sẽ tự động ép kiểu string về int để tính toán chứ chương trình không hề xảy ra lỗi. Bạn không tin có thể chạy ví dụ sau đây để kiểm chứng.

function tinhTong(int $a, int $b){
$total = $a + $b;
return $total;
}
// Gọi hàm ra kèm giá trị đối số, đối số b truyền string
echo tinhTong(5,"3 ngày");  // "3 ngày" được đổi thành int(3) và nó sẽ trả về kết quả là 8

Rõ ràng qua 2 trường hợp trên, bạn truyền sai đối số nhưng chương trình vẫn chạy không báo lỗi, điều này rất là nguy hiểm. Chính vì 2 trường hợp trên nên ngôn ngữ PHP được nhiều người đánh giá là khá lỏng lẻo. Rất may trong PHP 7 đã thêm khai báo strict(nghiêm ngặt), nó sẽ tạo ra "Lỗi nghiêm trọng" nếu kiểu dữ liệu không khớp. Cách thêm khai báo strict cũng rất đơn giản, bạn chỉ cần thêm dòng declare(strict_types=1); vào đầu tập tin PHP là được.

Bây giờ chúng ta thử khai báo strict cho ví dụ trên để hiểu hơn về vấn đề này.

declare(strict_types=1); // khai báo strict
function tinhTong(int $a, int $b){
$total = $a + $b;
return $total;
}
// Gọi hàm ra kèm giá trị đối số, đối số b truyền string
echo tinhTong(5,"3 ngày");  // Kết quả sẽ xuất hiện dòng lỗi như sau: PHP Fatal error: Uncaught TypeError: Argument 2 passed to tinhTong() must be of the type integer, string given, called in /home/KFBaXH/prog.php on line 8 and defined in /home/KFBaXH/prog.php:3 Stack trace: #0 /home/KFBaXH/prog.php(8): tinhTong(5, '3 ng\xC3\xA0y') #1 {main} thrown in /home/KFBaXH/prog.php on line 3

Khi khai báo strict có nghĩa là tuyên bố chặt chẽ buộc mọi thứ phải được sử dụng theo cách đã định.

4. Hàm có đối số mặc định

Khi xây dựng hàm có đối số mặc định, nếu như bạn không truyền đối số vào thì hàm sẽ tự lấy giá trị mặc định đã được khai báo từ đầu để thực thi chương trình.

Ví dụ: Ta có hàm gán chiều cao bất kỳ, kèm giá trị mặc định = 50 như sau:

declare(strict_types=1); // khai báo strict
function setHeight(int $height = 50) {
  echo "Chiều cao là : $height 
";
}

setHeight(350); // Kết quả 350
setHeight(); // Không truyền đối số nên sẽ lấy giá trị mặc định là 50

5. Khai báo kiểu trả về cho hàm

Thông thường khi viết hàm, ta thường sử dụng câu lệnh return để lấy giá trị trả về của một hàm như sau:

declare(strict_types=1); // khai báo strict
function setHeight(int $height = 50) {
   return $height;
}

echo "Chiều cao là: ".setHeight(350); // Kết quả 350

Trong PHP 7 có thêm phần khai báo kiểu cho câu lệnh trả về, để khai báo kiểu cho hàm trả về, hãy thêm dấu hai chấm (:) và kiểu dữ liệu ngay trước dấu ngoặc nhọn ({) mở khi khai báo hàm. Tham khảo ví dụ sau để hiểu hơn.

declare(strict_types=1); // khai báo strict
function tinhTong(float $a, float $b) : float {
  return $a + $b;
}
echo tinhTong(1.2, 5.2); // Kiểu trả về sẽ là float, vì đã khai báo kiểu trả về cho câu lệnh return

Ngoài ra bạn có thể khai báo kiểu trả về khác với đối số, nhưng bạn phải đảm bảo kết quả trả về đúng với kiểu câu lệnh trả về. Ví dụ ta có hàm tính tổng a và b, a, b có kiểu dữ liệu float, khai báo kiểu trả về là int như sau: 

declare(strict_types=1); // khai báo strict
function tinhTong(float $a, float $b) : int {
  return (int)($a + $b);
}
echo tinhTong(1.2, 5.8); 

6. Hàm có đối số dạng tham chiếu

Khi các đối số được truyền bằng giá trị thì các giá trị của đối số đó không bị thay đổi. Tuy nhiên trong một số trường hợp bạn muốn giá trị của các đối số đó thay đổi theo thì bạn cần phải truyền biến vào hàm dạng tham chiếu. Để biến đối số hàm thành dạng tham chiếu ta sử dụng toán tử & trước đối số, tham khảo ví dụ sau đây:

function addFive(&$value) {
  $value += 5;
}

$num = 5;
addFive($num); // Tăng 5 đơn vị
echo $num; // Kết quả là 10

Như vậy là mình đã chia sẻ xong kiến thức về hàm trong PHP, có thể nói đây là một trong những kiến thức rất quan trọng và bổ ích khi làm việc với PHP. Nó sẽ giúp bạn tối ưu được code, tránh bị trùng lặp code, giúp code chuyên nghiệp hơn ...

Ngọc Phương

Web Developer

Cảm ơn các bạn đã ghé thăm blog của tôi. Tôi tên là Phương và tôi đã có hơn 10 năm kinh nghiệm trong lĩnh vực phát triển website. Tôi tự tin khẳng định mình là chuyên gia trong việc tạo ra những trang web ấn tượng và hiệu quả. Bạn nào có nhu cầu thiết kế website có thể liên hệ cho tôi qua zalo 0935040740.

1 nhận xét

  • Khách hàng Hương Lan

    22-05-2024 Trả lời

    aaa

Tìm kiếm
Mạng xã hội
Quảng cáo