- Khái niệm hàm
- Tham số của hàm
- Tham số mặc định
- Giá trị trả về
- Tham số tham chiếu
- Gọi hàm động
- Hàm function_exists kiểm tra hàm tồn tại
- Không cố định tham số
Khái niệm hàm trong PHP
Hàm (function) là một khối chứa các câu lệnh (statement), mục đích là sử dụng khối này nhiều lần trong chương trình. Hàm không thi ngay, mà bạn muốn thi hành hàm ở chỗ nào thì phải gọi hàm theo tên của nó ở chỗ đó. Hàm do bạn tự định nghĩa có dạng như sau:
function functionName() { // code thực thi }
functionName
là tên hàm, tên bắt đầu bằng một ký tự hoặc gạch dưới _
, nhưng không được
bắt đầu bằng số hay ký tự đặc biệt. Tên hàm không phân biệt chữ in hoa - in thường
(khác với tên biến trong PHP).
Ví dụ sau tạo một hàm helloWorld()
. Ký hiệu {
bắt đầu thân hàm.
Để gọi hàm, thật đơn giản viết ra tên hàm: helloWorld
function helloWorld() { echo "Hello World!"; } helloWorld(); //gọi hàm //In ra "Hello World!"
Tham số của hàm
Các dữ liệu chuyển tới cho hàm (truyền cho hàm)
thông qua đối số của hàm,
chúng có vai trò như là biến.
Các đối số được chỉ ra sau tên hàm và nằm trong ()
,
ví dụ hàm sau tính phép nhân của hai số truyền vào hàm.
function nhanHaiso($so1, $so2) { $ketqua = $so1 * $so2; echo $ketqua; } nhanHaiso(2,5); //kết quả 10
Như ví dụ trên $so1, $so2
là tham số của hàm,
bạn muốn có bao nhiêu tham số cũng được - chúng cách nhau bởi dấu ,
.
Tham số nếu cần kiểm soát kiểu nghiêm ngặt, khi có thể khai báo kiểu dữ liệu cho nó.
function nhanBaiso(float $so1, float $so2, float $so3) { $ketqua = $so1 * $so2 * $so3; echo $ketqua; } nhanBaiso(2,5,2); //kết quả 20
Khi định nghĩa một hàm, các biến biểu diễn giá trị sẽ chuyển cho hàm xử lý được gọi là tham số
parameter.
Khi sử dụng hàm, các giá trị bạn chuyển đến cho hàm gọi là đối số
argument.
Tham số mặc định của hàm
Khi khai báo các tham số hàm, bạn có thể gán luôn cho nó một giá trị để khi gọi hàm viết thiếu tham số này thì hàm được truyền giá trị mặc định đó. Các tham số mặc định phải viết sau các tham số không có giá trị mặc định
function setNam(string $name='noname') { echo "Name is ".$name; } setNam('PHP'); // Name is PHP setNam(); // Name is noname
Khi bạn sử dụng hàm có tham số mặc định như vậy, bạn nên sắp xếp các tham số mặc định ở phía bên phải.
Giá trị trả về của hàm, mệnh đề return trong hàm
Một hàm có thể trả về một giá trị bằng câu lệnh return $value;
với $value
là giá trị trả về.
Trong hàm nếu gặp lệnh return
hàm sẽ dừng thi hành tại đó và gửi giá trị trả về cho nơi gọi hàm.
function phepnhan($num1, $num2) { $r = $num1 * $num2; return $r; } echo phepnhan(3,4); //Kết quả in ra: 12
Một hàm không có câu lệnh return
thì giá trị trả về là NULL
,
hàm không thể trả về nhiều giá trị, nhưng nếu muốn bạn có thể trả về một mảng.
Hàm có mệnh đề return;
nhưng không có giá trị thì cũng trả về NULL
Bạn cũng có thể chỉ rõ kiểu trả về của một hàm, với cú pháp:
function functionName() : kiểu_trả_về (void, int, string, array ...) { // code thực thi }
Truyền tham số dạng tham chiếu cho hàm
Mặc định hàm PHP truyền tham số dạng tham trị (trừ các object), nghĩa là giá trị được sao chép vào tham số. Nếu muốn truyền tham số dạng tham chiếu, tức tên tham số và tên biến truyền vào cùng trỏ tới một khu vực nhớ giá trị, thì tên biến truyền cho hàm cho thêm ký hiệu &
Xem ví dụ sau: Hàm addFive()
đơn giản là cộng thêm năm vào giá trị đối số và trả về kết quả.
function addFive($number) { $number += 5; return $number; } // VÍ DỤ KHI TRUYỀN THAM SỐ THAM TRỊ $a = 10; echo addFive($a) echo '<br>'; echo $a; /* Kết quả in ra là : 15 (giá trị hàm trả về, tức là giá trị $number trong hàm) 10 (giá trị của $a bên ngoài hàm) ==> Khi gọi addFile truyền $a cho nó, giá trị của $a được sao chép vào tham số $number của hàm, hàm không tác động gì đến $a */ // VÍ DỤ KHI TRUYỀN THAM SỐ THAM CHIẾU echo addFive(&$a) echo '<br>'; echo $a; /* Kết quả in ra là : 15 (giá trị hàm trả về, tức là giá trị $number cũng chính là biến $a) 15 (giá trị $a, đi qua hàm bị biến đổi) ==> Khi gọi addFile truyền &$a cho nó, thì $number tham chiếu đến chính biến $a (bộ nhớ) chứ không hề sao chép giá trị, do vậy các phép gán với $number chính là gán cho $a ở bên ngoài hàm */
Gọi hàm động
Động ở đây nghĩa có thể lưu tên hàm như một chuỗi và gọi hàm thông qua chuỗi này.
Ví dụ hàm addFive
và phepnhan
ở trên.
//Cách gọi thông thường: $a = 5; echo phepnhan(5,6); echo addFive($a); //Gọi thông qua một biến lưu tên hàm. $func1 = 'phepnhan'; $func2 = 'addFive'; echo $func1(5,6); // <---- Tương đương gọi phepnhan(5,6) echo $func2($a); // <---- Tương đương gọi addFive($a)
Kiểu này hay được dùng để xây dựng hàm callback: Xem thêm callback/callable trong PHP
Kiểm tra hàm tồn tại không với function_exists
Hàm function_exists($functionName) trả về true nếu hàm trong chuỗi $functionName có tồn tại trong hệ thống. Bạn sử dụng để kiểm tra sự tồn tại của hàm, trong PHP nhiều hàm dạng nội tại là luôn có sẵn, nhưng cũng có nhiều hàm phụ thuộc vào thành phần mở rộng cài thêm cho PHP. Ví dụ nếu không có hàm opcache_compile_file thì nghĩa là Opache PHP không được kích hoạt.
Danh sách tham số hàm với ký hiệu ...
Bạn có thể khai báo hàm mà tham số nhập vào là tùy ý người dùng khi đó khai báo như sau:
function functionName( ...$thamso) { }
Nếu vậy bạn có thể gọi hàm:
functionName();
functionName(1,2);
functionName(1,2,3,4,'a','b') ...
Lúc này bên trong hàm có một biến là $thamso
đó là biến mảng, chứa các giá trị người dùng truyền vào hàm theo thứ tự
function printNames(...$names) { foreach ($names as $name) print($name . '<br>'); } printNames('Mr A','Mr B', 'Mr C'); /* Mr A, Mr B, Mr C */
Ngoài các hàm thông thường, PHP còn có Hàm mũi tên (arrow) và hàm ẩn danh