V. Sử dụng hàm trong PHP
1. Hàm trong PHP
chỉ cần phải viết duy nhất một lần, và có thể được sử dụng nhiều lần trong toàn bộ chương trình, và thậm chí có thể được tái sử dụng trong các ứng dụng khác.
Nhờ khả năng tái sử dụng trong các dự án khác nhau, các lập trình viên có kinh nghiệm thường tìm cách xây dựng hoặc sưu tập các hàm thành các thư viện để tận dụng trong các ứng dụng khác, qua đó giảm thời gian, chi phí cũng như công sức xây dựng các ứng dụng mới.
Một hàm sẽ được xác định bởi tên hàm và các tham số đầu vào liên quan đến hàm đó. Thông thường, hàm sẽ trả về một kết quả nào đó. Đối với các hàm dựng sẵn, ta có thể hình dung các hàm như các hộp đen, nhận các dữ liệu đầu vào, xử lý rồi trả kết quả về cho tên hàm.
Chúng ta có thể hình dung cách thức sử dụng hàm như sau:
Các câu lệnh như echo, print... của PHP thực chất phải được gọi là các hàm chứ không phải là một câu lệnh.
Ví dụ: Để giải thích rõ hơn khái niệm hàm, ta quay trở lại với "câu lệnh" echo quen thuộc. Hàm echo(chuỗi) có tên là echo, tham số đầu vào là một chuỗi, và chức năng (kết quả mà nó trả về) là một dòng chữ (được lưu trong biến chuỗi) được trả về trình duyệt.
PHP cung cấp một thư viện các hàm dựng sẵn rất phong phú, đủ để sử dụng trong hầu hết các ứng dụng. 2. Một số hàm thông dụng trong PHP a. Các hàm xử lý mảng PHP hỗ trợ khá nhiều hàm để xử lý mảng, chúng ta có thể sử dụng các hàm này để phát triển nhanh các ứng dụng. Hàm in mảng
Để in các giá trị lưu trong mảng, chúng ta có thể sử dụng hàm print_r(). Tên hàm Giá trị trả về Tham số 1 Tham số 2 ... Tham số n
Cú pháp:
Void print_r(mixed thông_tin)
Hàm print_r sẽ hiển thị thông tin về một biến theo cách mà con người có thể đọc được. Nếu như thông_tin được hiển thị là một chuỗi hay một số thì giá trị của thông tin sẽ được in ra màn hình. Trong trường hợp thông_tin là một mảng, các giá trị sẽ được trình bày theo cú pháp khóa và giá trị.
Hàm xây dựng mảng
Để xây dựng một mảng, ngoài cách đã giới thiệu ở mục II chương 4, chúng ta cũng có thể sử dụng hàm array().
Cú pháp:
array array(tham_số);
Hàm này sẽ trả về một mảng các tham số. Nếu có nhiều hơn 1 tham số, các tham số phải được đặt cách nhau bởi một dấu phẩy.
Ví dụ:
$can=array (‘giáp’, ‘ất’, ‘bính’,’đinh’,’mậu’,’kỷ’, ‘canh’, ‘tân’, ‘nhâm’, ‘quý’);
Trong trường hợp muốn xác định chỉ số của mảng, tham số cần phải đưa vào theo cấu trúc
chỉ_số=>giá_trị. Ví dụ:
$array = array( 1, 1, 1, 1, 1, 8=>1, 4=>1, 19, 3=>13);
Cú pháp chỉ_số=>giá_trị, được ngăn cách nhau bởi các dấu phẩy, sẽ định nghĩa một chỉ số của mảng và gán giá trị cho phần tử của mảng có chỉ số chỉ_số. Trong trường hợp chúng ta không sử dụng cú pháp trên, các chỉ số sẽ được tự động sinh ra và bắt đầu bằng 0. Nếu như chỉ số là một số nguyên, chỉ số tiếp theo sẽ được tự động sinh ra bằng cách tăng thêm chỉ số trước đó 1 đơn vị. Khi có hai chỉ số trùng nhau, chỉ số cuối cùng sẽ ghi đè lên chỉ số trước đó.
Ví dụ:
$array = array( 1, 1, 1, 1, 1, 8=>1, 4=>1, 19, 3=>13); print_r($array);
Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 13 [4] => 1 [8] => 1 [9] => 19 )
Hàm kiểm tra sự tồn tại của một giá trị trong mảng
Để xác định một giá trị nào đó có nằm trong mảng đã cho hay không, chúng ta có thể sử dụng hàm in_array ().
Cú pháp:
bool in_array ( mixed giá_trị_cần_tìm, array mảng_cần_tìm [, bool strict])
Hàm này sẽ kiểm tra xem giá_trị_cần_tìm có nằm trong mảng_cần_tìm không? Nếu có, hàm sẽ trả về giá trị TRUE, ngược lại hàm sẽ trả về giá trị FALSE.
Hàm đếm số phần tử trong mảng
Để đếm số phần tử trong một mảng, chúng ta có thể sử dụng hàm count(). Cú pháp:
int count (tên_mảng); Ví dụ:
$a[0] = 1; $a[1] = 3; $a[2] = 5;
$result = count ($a); // $result == 3
Hàm kiểm tra sự tồn tại của một mảng
Để kiểm tra xem một biến có phải là một mảng hay không, ta có thể sử dụng hàm is_array().
bool is_array(tên_mảng)
Hàm này sẽ kiểm tra xem tên mảng có tồn tại hay không, và nó có phải là một mảng hay không. Nếu như tên_mảng xác định một mảng, hàm sẽ trả về giá trị TRUE, ngược lại sẽ trả về giá trị FALSE.
Hàm tính tổng các giá trị trong mảng
Trong trường hợp chúng ta có một mảng số, ta có thể tính tổng các giá trị trong mảng với hàm array_sum(). Cú pháp: array_sum (tên_mảng); Ví dụ: $a[0] = 1; $a[1] = 3; $a[2] = 5; echo (array_sum($a)); // in ra 9. Hàm sắp xếp mảng
Trong nhiều trường hợp, chúng ta cần sắp xếp lại mảng theo thứ tự tăng dần. Để làm điều này, chúng ta có thể sử dụng hàm sort().
Cú pháp:
void sort (array arr [, int sort_flags])
Hàm này chịu trách nhiệm sắp xếp dữ liệu trong mảng arr theo chiều tăng dần. Tham số tùy chọn sort_flags được dùng để xác định việc sắp xếp mảng theo loại dữ liệu nào. Tham số này có thể nhận một trong những giá trị sau đây
• SORT_REGULAR: So sánh các giá trị theo cách thông thường • SORT_NUMERIC: So sánh theo dạng số
• SORT_STRING: So sánh theo dạng chuỗi
Để sắp xếp mảng theo chiều giảm dần, ta có thể dùng hàm rsort với cú pháp tương tự. Bài tập:
Viết chương trình tạo ra một mảng các giá trị. Sắp xếp và in các phần tử trong mảng lên màn hình.
b. Các hàm xử lý chuỗi
Xử lý chuỗi là một trong những công việc mà các lập trình viên thường xuyên phải dùng đến. PHP hỗ trợ khá nhiều hàm để xử lý chuỗi.
Các hàm cắt bỏ khoảng trắng đầu và cuối chuỗi
Khi chúng ta so sánh chuỗi do người dùng nhập vào, rất có thể người dùng vô tình gõ thừa một dấu cách ở đầu hoặc cuối chuỗi. Vì vậy, trước khi thực hiện phép toán so sánh chuỗi, hãy sử dụng các hàm sau đây để cắt bỏ những khoảng trắng ở trước hoặc sau chuỗi:
Hàm ltrim
Cú pháp: string ltrim(string str)
Tác dụng: Trả về một chuỗi đã loại bỏ hết tất cả các ký tự trắng ở bên trái chuỗi str.
Ví dụ:
echo “|” . ltrim (“ Trang chủ “) . “|”;// In ra chuỗi “|Trang chủ |”
Hàm rtrim
Cú pháp: string rtrim(string str)
Tác dụng: Trả về một chuỗi đã loại bỏ hết tất cả các ký tự trắng ở bên phải chuỗi str.
Ví dụ:
echo “|” . rtrim (“ Trang chủ “) . “|”;// In ra chuỗi “| Trang chủ|”
Hàm trim
Cú pháp: string trim(string str)
Tác dụng: Trả về một chuỗi đã loại bỏ hết tất cả các ký tự trắng ở đầu và cuối chuỗi str.
Ví dụ:
echo “|” . trim (“ Trang chủ “) . “|”;// In ra chuỗi “|Trang chủ|”
Chú ý: Ngoài các ký tự trắng, các ký tự sau đây cũng bị loại bỏ:
• " " (ASCII 32 (0x20)), ký tự trắng mặc định trong bảng mã ASCII). • "\t" (ASCII 9 (0x09)), ký tự Tab.
• "\r" (ASCII 13 (0x0D)), ký tự về đầu dòng. • "\0" (ASCII 0 (0x00)), NUL-byte.
• "\x0B" (ASCII 11 (0x0B)), ký tự Tab dọc.
Các hàm chuyển đổi chữ in hoa – in thường
Hàm chuyển chuỗi sang chữ in thường
Cú pháp:
string strtolower ( string str)
Hàm này sẽ trả về một chuỗi, trong đó các ký tự sẽ được chuyển sang chữ thường. Ví dụ:
$str = "Mary Had A Little Lamb and She LOVED It So"; $str = strtolower($str);
echo $str; # sẽ in ra: mary had a little lamb and she loved it so
Hàm chuyển chuỗi sang chữ in hoa
Cú pháp:
string strtoupper ( string str)
Hàm này sẽ trả về một chuỗi, trong đó các ký tự sẽ được chuyển sang chữ thường. Ví dụ:
$str = "Mary Had A Little Lamb and She LOVED It So"; $str = strtoupper ($str);
echo $str; # sẽ in ra: MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
Chú ý: Đối với các ký tự tiếng Việt có dấu, các hàm này có thể sẽ xử lý không chính xác.
Các hàm tìm kiếm và thay thế
Tìm vị trí đầu tiên của chuỗi con trong một chuỗi lớn
Để xác định vị trí của một chuỗi văn bản nào đó trong chuỗi lớn hơn, ta sử dụng hàm strpos()
Cú pháp:
Hàm này sẽ tìm và trả về số nguyên xác định vị trí đầu tiên của chuỗi_cần_tìm trong
chuỗi_gốc. Nếu như không tìm thấy chuỗi_cần_tìm trong chuỗi_gốc, hàm sẽ trả về giá trị FALSE.
Hàm thay thế chuỗi
Để thay thế một chuỗi con bằng một chuỗi khác trong chuỗi đã cho, chúng ta sử dụng hàm str_replace()
Cú pháp:
mixed str_replace ( mixed chuỗi_cần_tìm, mixed chuỗi_sẽ_thay, mixed chuỗi_mẹ)
Hàm này sẽ tìm chuỗi_cần_tìm trong chuỗi_mẹ và thay thế chuỗi tìm thấy bởi
chuỗi_sẽ_thay. Cuối cùng hàm trả về một chuỗi. Các tham số đầu vào có thể là một mảng.
Ví dụ: <?
$tmp= str_replace (“<br”,”<hr>”,”Tên ca khúc: <BR> $cakhuc”); echo $tmp;
?>
Hàm lấy một phần chuỗi
Để lấy một phần chuỗi trong chuỗi đã cho, chúng ta có thể sử dụng hàm substr. Cú pháp:
string substr ( string string, int start [, int length])
Hàm này sẽ lấy một phần chuỗi đã cho, bắt đầu từ vị trí start và lấy một chuỗi có chiều dài
length. Chú ý rằng ký tự đầu tiên được đánh số vị trí là 0. Ví dụ:
$laychuoi = substr("abcdef", 1, 3); // trả về "bcd"
Hàm này chấp nhận các tham số âm. Nếu như vị trí start là một số âm, hàm sẽ tính vị trí từ phía bên tay phải sang:
$laychuoi = substr("abcdef", -3, 1); // trả về "d"
Để tính chiều dài của một chuỗi đã cho, chúng ta có thể sử dụng hàm strlen() Cú pháp:
int strlen ( string str)
Hàm này sẽ trả về chiều dài của chuỗi str.
Hàm mã hóa dữ liệu md5
Cú pháp: string md5 (string str)
Tác dụng: Trả về một chuỗi đã bị mã hóa theo cú pháp md5. Chuỗi sau khi đã bị mã hóa sang dạng md5 không thể khôi phục trở về nguyên bản như trước đó.
Người ta thường dùng hàm này để mã hóa mật khẩu trước khi lưu vào các cơ sở dữ liệu để đảm bảo rằng bản rõ của mật khẩu không thể bị xem trộm bởi một người thứ 2 nào khác.
Ví dụ:
$Password=”123456”; $Password=md5($Password);
echo $Password;// In ra chuỗi “e10adc3949ba59abbe56e057f20f883e” Bài tập:
Viết chương trình thực hiện các công việc sau:
- Tạo một form HTML chứa một ô textbox cho phép người dùng nhập vào một dãy số, các số được cách nhau bởi dấu phảy.
- Viết chương trình PHP để xử lý chuỗi số do người dùng nhập vào:
o Kiểm tra xem chuỗi có rỗng không? Nếu có thì tạo một liên kết yêu cầu nhập lại.
o Nếu chuỗi không rỗng:
Loại bỏ các ký tự trắng trước và sau chuỗi
Tìm và kiểm tra xem trong chuỗi có số 15 không? Nếu có thì in ra vị trí của chuỗi đó, tiếp đó thay thế chuỗi 15 bằng chuỗi 1,5.
Mã hoá phần tử cuối cùng của mảng đã cho ở dạng md5 và in chuỗi mã hoá lên trình duyệt.
c. Các hàm toán học
PHP cung cấp một số hàm toán học. Hầu hết các hàm này tương đồng với các hàm toán học trong các ngôn ngữ khác.
Bảng dưới đây cung cấp một số hàm toán học trong PHP:
STT Tên hàm Ý nghĩa
1. Sin(x) Tính sin(x)
2. Abs(x) Trả về trị tuyệt đối của x
3. Ceil(x) Trả về số nguyên nhỏ nhất >=x
4. Floor(x) Trả về số nguyên lớn nhất <=x
5. Rand(x,y) Trả về một số nguyên ngẫu nhiên nằm
giữa x và y
6. Sqrt(x) Trả về căn bậc 2 của x
7. Round(x,y) Làm tròn x tới y chữ số thập phân
8. Pow(x,y) Trả về x mũ y
9 Pi() Trả về số pi
a. Các hàm xử lý thời gian và ngày tháng
PHP cung cấp một số hàm hỗ trợ việc xử lý thời gian và ngày tháng. - Hàm getdate()
Hàm này được sử dụng để lấy thời gian và ngày tháng hiện hành. Hàm trả về một mảng chứa các thông tin về thời gian và ngày tháng hiện hành.
Ví dụ: <?php
$today = getdate(); print_r($today); ?>
Hàm này sẽ trả về một mảng với các thông số như sau: Array ( [seconds] => 40 // Số giây từ 0-59 [minutes] => 58 // Số phút từ 0-59 [hours] => 21 // Số giờ từ 0-23 [mday] => 17 // Số ngày từ 1-31
[wday] => 2 // Thứ trong tuần, từ 0 (chủ nhật) đến 6 (thứ 7) [mon] => 6 // Số tháng trong năm, từ 1-12
[year] => 2003 // Số năm
[yday] => 167 // Số ngày trong năm, từ 0 - 365 [weekday] => Tuesday // Ngày ở dạng tiếng Anh [month] => June // Tháng ở dạng tiếng Anh
[0] => 1055901520 // Số giây tính từ mốc 00:00:00 ngày 1/1/1970 )
- Hàm microtime(): Trả về số microseconds Ví dụ: Tính thời gian thực thi của chương trình: <?php
$time_start = microtime(true); // Làm cái gì đó
$time_end = microtime(true); $time = $time_end - $time_start;
echo "Chương trình được thực hiện trong $time giây\n"; ?>
- Hàm time(): Trả về số giây tính từ mốc 00:00:00 ngày 1/1/1970 -
b. Các hàm kiểm tra dữ liệu
PHP cung cấp một số hàm hỗ trợ kiểm tra dữ liệu. Hầu hết các hàm này đều trả về dạng true/false.
Bảng dưới đây liệt kê một số hàm kiểm tra dữ liệu thông dụng
STT Tên hàm Ý nghĩa
1. isset($x) Kiểm tra xem biến $x đã được thiết
lập hay chưa? Trả về true nếu $x đã được thiết lập, ngược lại là false
2. is_numeric($x) Kiểm tra xem biến $x có phải là một số hay không? Trả về true nếu $x là một số, ngược lại là false
3. is_int($x) Kiểm tra xem biến $x có phải là một
số nguyên hay không? Trả về true nếu $x là một số nguyên, ngược lại là false 4. is_array($x) Kiểm tra xem biến $x có phải là một
mảng hay không? Trả về true nếu $x là một mảng, ngược lại là false
một chuỗi, ngược lại là false
6. is_object($x) Kiểm tra xem biến $x có phải là một đối tượng hay không? Trả về true nếu $x là một đối tượng, ngược lại là false 7. checkdate ( int $month, int $day,
int $year ) Trả về true nếu $month, $day, $year xác định một tháng, ngày, năm hợp lệ. Ngược lại là false.
3. Các hàm do người dùng định nghĩaa. Xây dựng hàm trong PHP a. Xây dựng hàm trong PHP
Trong PHP, chúng ta có thể tự xây dựng các hàm của mình. Trước khi sử dụng, chúng ta cần phải tiến hành cài đặt hàm.
Cú pháp cài đặt một hàm có thể được tóm tắt như sau:
function ten_ham (thamso1, thamso2, ..., thamson) {
// đoạn chương trình xử lý dữ liệu bên trong hàm return gia_tri;
}
Trong đó:
- function là từ khóa,
- ten_ham là tên hàm do chúng ta tự đặt. Tên hàm thường sử dụng các ký hiệu chữ cái, chữ số và dấu gạch dưới.
- Các thamsoi là các tham số đưa vào. Các tham số khi khai báo thường ở dưới dạng các biến, còn khi sử dụng thì có thể là biến, hằng, hay một giá trị nào đó. Một hàm có thể không có hoặc có nhiều tham số.
- Giá trị gia_tri sau từ khóa return là giá trị trả về sau khi gọi hàm. Giá trị này có thể là giá trị của một biến, hay một giá trị cụ thể nào đó.
Chú ý: Chúng ta có thể sử dụng từ khóa return để trả một giá trị về cho tên hàm, nhưng cũng có thể không cần phải trả về một giá trị nào cả.
function chao() {
return "<B>Xin chào</B>"; }
Ví dụ 2:
Khi xây dựng các ứng dụng liên quan đến CSDL, ta thường phải xuất dữ liệu ra một bảng nào đó.
Một bảng trong HTML được cấu thành từ các cặp thẻ <table>, <tr>, <td> lồng vào nhau, ở mức độ nhỏ nhất của cấu trúc trên là một ô.
Một ô có thể có chứa thông tin (nằm giữa các cặp thẻ <td></td>), có thể chứa các thuộc tính định dạng (style)...
Chúng ta sẽ xây dựng một hàm để tự động sinh ra nội dung của một ô. Hàm này có 2 tham