Hàm là một đoạn code độc lập thực hiện một nhiệm vụ cụ thể. PHP có một bộ sưu tập khổng lồ các hàm tích hợp mà bạn có thể gọi trực tiếp trong các tập lệnh PHP của mình để thực hiện một tác vụ cụ thể, như gettype (), print_r ()…Ngoài các hàm có sẵn, PHP cũng cho phép bạn tạo các hàm của riêng mình, có thể sử dụng lại để thực hiện các tác vụ cụ thể và có thể được lưu giữ. Dưới đây là một số lợi thế của việc sử dụng hàm:
- Giảm sự lặp đi lặp lại một đoạn code trong cùng một chương trình. Hàm cho phép bạn gom chức năng được sử dụng nhiều lần thành một hàm duy nhất. Và từ đó khi nào bạn cần chức năng này bạn chỉ cần gọi hàm đó ra thay vì phải copy đoạn code và dán nhiều lần.
- Hàm giúp dễ bảo trì hơn. Vì một hàm có thể được sử đụng nhiều lần cũng như nhiều nơi. Nên khi ta thay đổi hàm thì tất cả nơi sử dụng hàm cũng được thay đổi thay vì phải đi đến từng file để thay đổi khi không sử dụng hàm.
- Hàm giúp việc gỡ lỗi trở nên dễ dàng hơn. Khi chương trình chia thành các hàm nhỏ, nếu có lỗi xảy ra, bạn sẽ biết chính xác hàm nào gây ra lỗi và tìm lỗi ở đâu. Do đó việc gỡ lỗi trở nên dễ dàng hơn.
- Các chức năng có thể được sử dụng lại trong ứng dụng khác. Bởi vì một chức năng được tách biệt với phần còn lại của tập lệnh, thật dễ dàng để sử dụng lại chức năng tương tự trong các ứng dụng khác chỉ bằng cách đưa vào tệp php chứa các chức năng đó.
Tạo và gọi hàm
Cú pháp:
1 2 3 |
function functionName(){ // Code sẽ được thực thi; } |
Khai báo một hàm do người dùng tự định nghĩa được bắt đầu với từ function tiếp theo là tên của function theo sau là cặp dấu nháy đơn () và cuối cùng là cặp dấu ngoặc nhọn {} và code của bạn sẽ được thực thi ở đây.
1 2 3 4 5 6 |
<?php function functionName(){ echo "Code sẽ được thực thi ở đây."; } functionName(); // Gọi hàm ?> |
Ở trên là một hàm đơn giản để in dòng chữ Code sẽ được thực thi ở đây. ra trình duyệt. 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.
Hàm có chứa tham số
Bạn có thể chỉ định các tham số khi bạn xác định hàm của mình, để chấp nhận các giá trị đầu vào tại thời điểm chạy. Các tham số hoạt động giống như các biến giữ chỗ trong một hàm, chúng được thay thế tại thời điểm chạy bởi các giá trị (được gọi là đối số) được cung cấp cho hàm tại thời điểm gọi.
1 2 3 |
function functionName($a, $b){ // Code sẽ được thực thi } |
Bạn có thể xác định bao nhiêu tham số tùy thích. Tuy nhiên, đối với mỗi tham số bạn chỉ định, phải có một đối số tương ứng được truyền vào khi gọi hàm. Ví dụ bên dưới tôi đã tạo hàm getSum và truyền vào 2 tham số num1 và num2, do đó khi gọi hàm tôi cũng phải truyền vào 2 tham số tương ứng.
1 2 3 4 5 6 |
<?php function getSum($num1, $num2){ echo $num1 + $num2; } getSum(4, 5); ?> |
Output: 9
Hàm với tham số tùy chọn và giá trị mặc định
Bạn cũng có thể tạo các hàm với các tham số tùy chọn – chỉ cần chèn tên tham số, theo sau là dấu bằng (=), theo sau là giá trị mặc định, như thế này.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // định nghĩa hàm function getSize($name, $size = '15 cm') { echo $name.": ".$size; } // Gọi hàm getSize("Nguyễn Văn Tèo", '20 cm'); echo "<br />"; getSize("Phạm Văn Tý"); ?> |
Nguyễn Văn Tèo: 20 cm Phạm Văn Tý: 15 cm |
Như bạn thấy trong lần gọi hàm getSize thứ 2 tôi đã không truyền tham số thứ 2 và nó sẽ lấy giá trị mặc định 15 cm để thay thế.
Giá trị trả về của hàm
Một hàm có thể có giá trị trả về với lệnh return. Giá trị trả về có thể thuộc bất cứ kiểu giá trị nào kể cả là mảng hoặc object. Một hàm không thể có nhiều giá trị trả về, tuy nhiên bạn có thể nhận được giá trị tương tự bằng cách trả về một mảng như ví dụ bên dưới:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php // định nghĩa hàm function getList() { $arr = [ 'name' => 'Nguyễn Văn Tèo', 'age' => 21, 'address' => 'Hồ Chí Minh' ]; return $arr; } // Gọi hàm $newArr = getList(); print_r($newArr); ?> |
Array ( [name] => Nguyễn Văn Tèo [age] => 21 [address] => Hồ Chí Minh ) |
Gọi hàm
Chúng ta có hai cách gọi hàm thông dụng: bằng giá trị và bằng tham chiếu.
Truyền bằng giá trị
Trong PHP, có hai cách bạn có thể truyền đối số cho một hàm: bằng giá trị và bằng tham chiếu. Theo mặc định, các đối số của hàm được truyền theo giá trị để nếu giá trị của đối số trong hàm bị thay đổi, nó không bị ảnh hưởng bên ngoài hàm. Có nghĩa là truyền bằng giá trị, ở trong hàm bạn thay đổi giá trị của biến nhưng đến khi thoát khỏi hàm thì biến đó vẫn giữ được giá trị ban đầu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $id = 1; // định nghĩa hàm function getId($id) { $id = 10; echo $id; } // Gọi hàm getId($id); echo $id; ?> |
Kết quả của đoan code trên là 10 và 1. Ban đầu $id có giá trị là 1 sau đó ở trong hàm getId tôi đã thay đổi $id = 10. Nhưng khi thoát khỏi hàm tôi in ra $id vẫn bằng 1. Đây là 1 ví dụ về truyền tham số bằng giá trị.
Truyền bằng tham chiếu
Khi các đối số được truyền bằng giá trị thì giá trị của các đối số của hàm đang gọi không bị thay đổi. Tuy nhiên đôi khi bạn muốn những giá trị đó thay đổi theo thì lúc này bạn phải truyền biến vào hàm dạng tham chiếu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $id = 1; // định nghĩa hàm function getId(&$id) { $id = 10; echo $id; } // Gọi hàm getId($id); echo $id; ?> |
Cùng một đoạn code so với dạng truyền bằng giá trị ở trên nhưng ở đây kết quả trả về lại là 10 và 10. Ở đây tôi chỉ thêm dấu & vào trước biến $id ở hàm getId thôi. Nhưng khi thoát khỏi hàm biến $id đã thay đổi giá trị theo.
Hàm gọi hàm
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php function a(){ b(); } function b(){ c(); } function c(){ echo "HelloWorld."; } a(); ?> |
Đoạn code trên sẽ trả về dòng chữ HelloWorld vì tôi đã gọi hàm a nhưng hàm a lại gọi hàm b và hàm b lại gọi hàm c. Nếu các bạn debug vào từng dòng code thì cũng không khó hiểu lắm đâu.