Hàm là một chương
trình thực hiện một tác vụ định nghĩa cụ thể, chúng thực chất là những đoạn
chương trình nhỏ giúp giải quyết một vấn đề lớn. Hàm là một phương
pháp lập trình hướng thủ tục trong ngôn ngữ PHP và
các ngôn ngữ bậc cao khác, hiểu được nó các bạn mới có thể tiếp tục học những
kiến thức như lập trình đối tượng, vì thế tôi hy vọng các bạn học lập
trình PHP cố gắng nắm vững nó nhé. Trong bài này chúng ta sẽ
tìm hiểu các nội dung sau:
§ Cách sử dụng hàm (xem thêm
tại php.net)
§ Cấu trúc của một hàm
§ Các cách gọi hàm (gọi bằng giá trị và tham
chiếu)
§ Các quy tắc và phạm vi của hàm
1.
Cách Sử Dụng Hàm Trong PHP
Hàm trong PHP dùng để
thực hiện một khối lệnh liên tiếp có điểm đầu và điểm cuối. Một hàm được xác
định thực hiện một công việc cụ thể nào đó, giả sử tôi viết một hàm kiểm tra số
chẵn hay số lẻ thì mục đích của hàm đó là kiểm tra một số là số chẵn hay lẻ. Đặc
biệt hàm có thể gọi ở nhiều nơi khác nhau.
2.
Cấu trúc của một hàm Trong PHP
Cú pháp tổng quát khai
báo hàm trong PHP là:
Dạng 1:
|
1
2
3
4
5
|
function func_name($vars)
{
// các đoạn code
return $val;
}
|
Trong
đó:
func_name là tên của hàm, $vars là các biến sẽ truyền vào trong hàm, return $val là hàm sẽ trả về giá trị $val. Nếu hàm không có trả về giá trị nào thì ta không có dòng return này.
Ví dụ:
func_name là tên của hàm, $vars là các biến sẽ truyền vào trong hàm, return $val là hàm sẽ trả về giá trị $val. Nếu hàm không có trả về giá trị nào thì ta không có dòng return này.
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// Số cần kiểm tra
$number =
12;
// gọi đến hàm kiem_tra_so_chan và
truyền biến cần kiểm tra vào
// vì hàm kiem_tra_so_chan trả về
true/false nên ta có thể đặt nó trong câu điều
// kiện if như thế này
if
(kiem_tra_so_chan($number)){
echo
'Số chẵn';
}
else{
echo
'Số lẽ';
}
// Hàm kiểm tra số chẵn sẽ trả về
true nếu $number là số chẵn và ngược lại.
// biến $number gọi là biến truyền
vào hàm, đó chính là biến cần kiểm tra
function kiem_tra_so_chan($number)
{
if
($number %
2 == 0)
return true;
else
return false;
}
|
Hàm
kiem_tra_so_chan có nhiệm vụ kiểm tra một số là số chẵn hay số lẻ, nếu số chẵn
thì trả về true, ngược lại trả về false. Muốn kiểm tra số nào thì ta truyền
biến đó vào và đó chính là biến $number.
Trong chương trình chính sẽ gọi đến hàm kiem_tra_so_chan và kiểm tra hàm này
trả về true hay false, nếu true thì xuất ra màn hình Số chẵn, ngược lại xuất ra
màn hình số lẽ. Hàm kiem_tra_so_chan gọi là hàm có kết quả trả về vì trong thân
hàm có return. Nếu bạn muốn hàm kiem_tra_so_chan không trả về giá trị mà xuất
ra màn hình luôn, tức là trong chương trình chính chỉ cần gọi tới và truyền
biến vào là xong. Ta làm như sau:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// Số cần kiểm tra
$number =
12;
// gọi đến hàm kiem_tra_so_chan và
truyền biến cần kiểm tra vào
kiem_tra_so_chan($number);
// Hàm này có nhiệm vụ xuất ra màn
hinh số chẵn nếu biến truyền vào ($number)
// là Số chẵn, và ngược lại sẽ
xuất ra màn hình là Số lẽ
function kiem_tra_so_chan($number)
{
if
($number %
2 == 0)
{
echo
'Số chẵn';
}
else
{
echo
'Số lẽ';
}
}
|
Đọc
đến đây các bạn có thắc mắc là tại sao hàm trong php lại để ở dưới cùng mà các
dòng lệnh ở trên vẫn hiểu, vì theo nguyên tắc trình biên dịch dịch từ trên
xuống và từ trái qua phải. Đó là vì hàm trong php có thể để bất cứ đâu trên 1
file thì các bạn có thể gọi đến thoải mái trong file đó.
Truyền nhiều biến vào
hàm trong php
Các biến truyền vào
hàm trong php có thể là các kiểu bất kỳ (tham khảo trong bài các kiểu dữ liệu
trong php). Và số biến truyền
vào là không giới hạn, như ví dụ trên thì chỉ có 1 biến truyền vào là number,
nhưng thực tế bạn có thể truyền nhiều biến vào bằng cách mỗi biến cách nhau bởi
dấu phẩy.
Ví dụ:
|
1
2
3
4
|
function tinhtong($a, $b)
{
return $a + $b;
}
|
Hàm
này sẽ tính tổng của 2 biến truyền vào, các biến cách nhau bởi dấu phẩy. Như
vậy trong chương trình chính mình sẽ làm như sau:
|
1
2
3
4
5
6
7
8
9
|
$so1
= 12;
$so2
= 13;
echo
tinhtong($so1, $so2);
function tinhtong($a, $b)
{
return $a + $b;
}
|
Tôi
cố ý đặt tên là $so1 và $so2 để nó không trùng với tên biến trong hàm tính
tổng, mục đích là để các bạn không hiểu nhầm rằng các biến truyền vào hàm phải
cùng tên với các biến ở chương trình chính.
Gán giá trị mặc định
cho biến truyền vào
Nếu một hàm trong php
bạn khai báo có 2 biến truyền vào mà lúc sử dụng bạn chỉ truyền có 1 biến vào
thì hệ thống sẽ báo lỗi ngay. Trong thực tế bạn muốn có những hàm không ràng
buộc phải bắt buộc truyền đủ biến vào, vì thế nó cũng cấp cho chúng ta một chức
năng là truyền giá trị mặc định cho biến trong các hàm, mời các bạn tham khảo
ví dụ sau:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$so1
= 12;
$so2
= 13;
// chỉ truyền 2 đối số vào
echo
tinhtong($so1, $so2);
// $c có một giá trị mặc định
// hàm này tính tổng của 3 số
function tinhtong($a, $b, $c =
false)
{
$tong = $a +
b;
if
($c !=
false){ // nếu $c được truyền vào (vì false là giá trị mặc định)
$tong = $tong + $c; //
thì thực hiện cộng thêm $c
}
return $tong;
}
|
Bạn
thấy hàm tính tổng có 3 đối số truyền vào, trong đó có một đối số $c mình gán =
false, đây chính la giá trị mặc định của đối số truyền vào $c.
Hàm tinhtong có nhiệm vụ tính tổng cả 3 số, nếu $c không truyền vào thì chỉ tính tổng của 2 số thôi
Hàm tinhtong có nhiệm vụ tính tổng cả 3 số, nếu $c không truyền vào thì chỉ tính tổng của 2 số thôi
Tham số thực và tham
số hình thức
Các biến ta định nghĩa
trong hàm gọi là tham số hình thức, còn biến mà ta truyền vào ở chương trình
chính gọi là tham số thực.
|
1
2
3
4
5
6
7
8
9
|
// Chuong trinh chinh
$so
= 12;
$flag =
kiem_tra_so_nguyen_to($so);
// ham kiem tra so nguyen to
function kiem_tra_so_nguyen_to($number)
{
// code
}
|
Tham
số $number trong hàm
kiem_tra_so_nguyen_to gọi là tham số hình thức, biến $so trong chương trình
chính gọi là tham số thực.
Biến toàn cục và biến
cục bộ
Định nghĩa này không
có gì lạ đối với các ngôn ngữ như c, c++, đối với PHP thì cách dùng nó hơi khác
so với các ngôn ngữ này. Biến toàn cục chính là các biến ta khai báo ở chương
trình chính, còn biến cục bộ là biến ta khai báo ở các hàm.
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// Biến toàn cục
$bien_toan_cuc =
12;
function kiem_tra()
{
// Biến cục bộ
$bien_cuc_bo =
13;
// Lấy biến toàn cục
global $bien_toan_cuc;
// Lấy số dư biến cục bộ chia cho
biến toàn cục và
// kiểm trả về true nếu số dư = 0,
ngược lại trả về false
if
($bien_cuc_bo % $bien_toan_cuc){
return true;
}
else{
return false;
}
}
|
Nhìn
các ghi chú các bạn cũng hiểu rồi đúng không nào. Trong php để lấy giá trị biến
toàn cục ta dùng lệnh global $tenbien để lấy. Trong
các Framwork thì điều này ít sử dụng nhưng với các CMS như Wordpress thì
rất hay sử dụng lệnh này để gọi biến toàn cục.
Biến Tĩnh
Biến tĩnh là các biến
cố định bên trong các hàm, không giống như các biến toàn cục chúng không được
biết đến bên ngoài hàm tức là chỉ biết đến bên trong hàm nhưng giá trị của
chúng sẽ lưu lại sau mỗi lần gọi hàm. Để khai báo là một biến tĩnh ta dùng từ
khóa static $tenbien;
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
|
// ham kiem tra
function kiem_tra()
{
// bien tinh
static $a =
0;
$a++;
echo
$a;
}
kiem_tra();
kiem_tra();
|
Chạy
đoạn code này màn hình sẽ xuất hiện giá trị 1 và 2 bởi vì lần gọi hàm thứ nhất
biến $a được tăng lên 1 và xuất ra màn hình 1. Vì $a là biến tĩnh nên nó được
lưu lại trong vùng nhớ. Qua lần gọi hàm thứ 2 biến $a được tăng lên 1 nữa là 2
nên xuất ra màn hình là 2, và đương nhiên giá trị 2 được lưu lại trong vùng nhớ
cho các lần gọi tiếp theo.
3.
Các Cách Gọi Hàm Trong PHP
Truyền bằng giá trị:
Mặc định tất cả các
đối số truyền vào hàm đều là truyền bằng giá trị. Điều này có nghĩa là khi các
đối số được truyền đến hàm được gọi, giá trị được truyền thông qua các biến tạm
(tham số hình thức). mọi thao tác chỉ thực hiện trên biến tạm này nên nó không
hề tác động đến biến chính của mình. Điều này có nghĩa là nếu truyền bằng giá
trị thì trong hàm nếu ta tác động đến giá trị biến truyền vào thì sau khi thoát
khỏi hàm giá trị đó không thay đổi.
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// Biến
$a
= 1;
// Hàm tăng giá trị tham số truyền
vào lên 1
function tang_len_1($a)
{
return $a +
1;
}
// Xuất giá trị trả về của hàm
echo
tang_len_1($a);
// Xuất giá trị của biến
echo
$a;
|
Kết
quả xuất ra màn hình sẽ là 2 và 1. Như thế biến $a vẫn giữ nguyên giá trị bằng
1 sau khi hàm kết thúc. Còn trong hàm thì biến $a có giá trị là 2.
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.
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// Biến
$a
= 1;
// Hàm tăng giá trị tham số truyền
vào lên 1
function tang_len_1(&$a)
{
$a
= $a +
1;
return $a;
}
// Xuất giá trị trả về của hàm
echo
tang_len_1($a);
// Xuất giá trị của biến
echo
$a;
|
Kết
quả xuất ra màn hình là 2 và 2. như vậy biến $a đã bị thay đổi.
Sự khác biệt ở đoạn
code này so với đoạn code trên là biến $a ở hàm tng_len_1 có dấu &, đây
chính là cú pháp trong PHP báo cho trình biên dịch biết đó là một biến ở dạng
tham chiếu.
4.
Các Quy Tắc Và Phạm Vi Của Hàm
Một hàm có thể gọi tới
một hàm, tức là trong phần thân của hàm A có thể gọi đến hàm B, và trong thân
hàm B có thể gọi đến hàm C. Đây chính là hàm gọi hàm.
Ví dụ:
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// Danh sách các hàm
function A()
{
B();
}
function B()
{
C();
}
function C()
{
echo
'C';
}
// Chương trình chính gọi đến hàm
A
A(); // Kết quả xuất ra màn
hình là 'C'
|
Bạn
có thấy sự thú vị không. tôi thì thấy hơi bị căng vì phải suy nghĩ từng dòng
code thế này :D. Bạn cứ chạy code theo quy tắc từ trên xuống và từ trái qua
phải. Debug từng dòng là sẽ ra được kêt quả. Nếu bạn làm quen thì sau này bạn
sẽ quản lý được code của mình đó.
Thường thì người ta
viết các hàm vào một file php riêng, và chương trình chính vào một file PHP
riêng. Trong chương trình chính muốn sử dụng hàm nào thì gọi hàm đó vào.
Không có nhận xét nào:
Đăng nhận xét