Bài giảng Phát triển ứng dụng Web. Web Programming - Chương 9: PHP Basi

Nội dung

1. Giới thiệu PHP

2. Hoạt động của PHP & Cài đặt

3. Cú pháp

4. Biến

5. Toán tử

6. Chuỗi

7. Mảng

8. Cấu trúc điều khiển

9. Hàm

pdf 82 trang kimcuc 8720
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phát triển ứng dụng Web. Web Programming - Chương 9: PHP Basi", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Phát triển ứng dụng Web. Web Programming - Chương 9: PHP Basi

Bài giảng Phát triển ứng dụng Web. Web Programming - Chương 9: PHP Basi
1PHP Basic
Luong Tran Hy Hien, FIT of HCMUP
Nội dung
1. Giới thiệu PHP
2. Hoạt động của PHP & Cài đặt
3. Cú pháp
4. Biến
5. Toán tử
6. Chuỗi
7. Mảng
8. Cấu trúc điều khiển
9. Hàm
2
31. Giới thiệu PHP – Lịch sử
• PHP : Rasmus Lerdorf in 1994 (được phát triển để phát sinh
các form đăng nhập sử dụng giao thức HTTP của Unix)
• PHP 2 (1995) : Chuyển sang ngôn ngữ script xử lý trên server.
Hỗ trợ CSDL, Upload File, khai báo biến, mảng, hàm đệ quy,
câu điều kiện, biểu thức, 
• PHP 3 (1998) : Hỗ trợ ODBC, đa hệ điều hành, giao thức email
(SNMP, IMAP), bộ phân tích mã PHP (parser) của Zeev Suraski
và Andi Gutmans
• PHP 4 (2000) : Trở thành một thành phần độc lập cho các
webserver. Parse đổi tên thành Zend Engine. Bổ sung các tính
năng bảo mật cho PHP
• PHP 5 (2005) : Bổ sung Zend Engine II hỗ trợ lập trình HĐT,
XML, SOAP cho Web Services, SQLite
• Phiên bản mới nhất của PHP là version PHP 5.5.4
(www.php.net – 19.09.2013)
41. Giới thiệu PHP – PHP là gì?
• PHP được phát triển từ ngôn ngữ kịch bản
(script) với mục đích xây dựng trang Web cá
nhân (Personal Home Page). Sau đó đã được
phát triển thành một ngôn ngữ hoàn chỉnh
và được ưa chuộng trên toàn thế giới trong
việc phát triển các ứng dụng Web.
• PHP là một ngôn ngữ thông dịch.
• Là ngôn ngữ server-side script, tương tự như
ASP, JSP,  thực thi ở phía Server.
• Tập tin PHP có phần mở rộng là .php
• Cú pháp tương tự ngôn ngữ C & Perl
51. Giới thiệu PHP – Ưu điểm
• Web Servers: Apache, Microsoft IIS, Caudium, Netscape
Enterprise Server
• Hệ điều hành: UNIX (HP-UX, OpenBSD, Solaris, Linux),
Mac OSX, Windows NT/98/2000/XP/2003/vista
• Hệ QTCSDL: Adabas D, dBase, Empress, FilePro (read-
only), Hyperwave, IBM DB2, Informix, Ingres, InterBase,
FrontBase, mSQL, Direct MS-SQL, MySQL, ODBC, Oracle
(OCI7 and OCI8), Ovrimos, PostgreSQL, SQLite, Solid,
Sybase, Velocis, Unix dbm
(Multi - Platform)
61. Giới thiệu PHP – Ưu điểm
PHP được sử dụng rộng rãi trên môi trường 
phát triển web
Nguồn: 
Ưu điểm và khuyết điểm của PHP?
Đánh giá JSP PHP .Net
ƯU ĐIỂM Open source
Clearly code 
(HTML,JSP,..)
The best DBMS 
support: Oracle
Open source
 Mix code 
(HTML,PHP)
The best DBMS 
support : MySQL
 Code same as: C
 Config: easy
 Community 
support: good
 Open source
Clearly code 
(HTML,.Net,..)
The best DBMS 
support : SQL Server
KHUYẾT 
ĐIỂM
 Run: slow
 Support: poor
 Config: complex
 Support: poor
 IDE: poor
8Một số website dùng PHP
92. Hoạt động của Web Server
CƠ CHẾ HOẠT ĐỘNG
10
2. Hoạt động của Web Server
• Apache và IIS được xây dựng để đáp ứng các yêu
cầu (request) các tập tin HTML
• Không hiểu cách thực thi mã PHP ở phía server
• Apache sử dụng các modules để “hiểu” cách thực
thi các đoạn mã viết bằng PHP
• IIS sử dụng tập lệnh ISAPI - Internet Server
Application Programming Interface - để “hiểu” các
lệnh của PHP và ASP
• Ngoài ra, cả Apache và IIS đều hỗ trợ nhiều module
khác phục vụ cho việc triển khai ứng dụng web một
cách hiệu quả
11
2. Hoạt động của Web Server
PHP Test
Hello World'; ?>
hello.php
PHP Test
Hello World
output
12
2. Hoạt động của Web Server
Sử dụng phương thức echo "Nội dung" để xuất thông 
tin lên trình duyệt.
2. Hoạt động của Web Server
14
2. Yêu cầu cài đặt
• Download Apache Server
Download Apache for free here: 
• Download PHP
Download PHP for free here: 
• Download MySQL Database
Download MySQL for free here: 
2. Yêu cầu cài đặt
15
PHƯƠNG ÁN 1
PHƯƠNG ÁN 2
PHƯƠNG ÁN 3 Cấu hình manual
16
2. Yêu cầu cài đặt
Sử dụng giải pháp trọn gói (All in One):
• LAMP – Linux
• WAMP – Windows
• XAMPP – Windows/Linux
XAMPP - Tutorial
17
XAMPP - Tutorial
• Chỉnh port cho Server
18
XAMPP - Tutorial
• Chỉnh port cho Server
19
phpMyAdmin
20
3. Cú pháp
• Phát biểu: 
• Sử dụng để đánh dấu lệnh PHP
• Các câu lệnh php cách nhau bởi dấu ‘;’
• Không phân biệt khoảng trắng, tab hay ký tự xuống 
dòng. 
• Ví dụ: 
21
3. Cú pháp (tt) – Ghi chú
• Ghi chú của PHP tương tự như của
C++ và Perl
• Có 3 loại ghi chú: 
– Sử dụng ‘//’ để ghi chú
– Sử dụng ‘#’ để ghi chú
– Sử dụng /*  */ để ghi chú
• Ví dụ: 
<?php
print “chào mọi nguời.”; //print dùng để xuất chuỗi
?>
 #tương tự như 22
3. Cú pháp (tt) – Kiểu dữ liệu
• boolean
• integer
• double
• string
• array
• object
23
Một biến trong PHP có thể lưu 
bất kỳ kiểu dữ liệu nào
3. Kiểu dữ liệu (tt)
24
• Chuyển đổi kiểu dữ liệu
–Cách 1 (automatic)
$var = “100” + 15;
$var = “100” + 15.0;
$var = 39. “ Steps”;//Chú ý
–Cách 2 (datatype) $var
–Cách 3 settype($var, “datatype”)
• VD:
3. Kiểu dữ liệu (tt)
25
• Kiểm tra kiểu dữ liệu
gettype is_string isset
is_integer is_array unset
is_double is_object empty
• Ví dụ
$var = “test”;
if (isset($var))
echo “Variable is Set”;
if (empty($var))
echo “Variable is Empty”;
3. Kiểu dữ liệu (tt)
26
• Một số hàm xử lý số
abs pow decbin srand(seed)
ceil sqrt bindec rand
Floor log dechex rand(min, max)
round log10 hexdec 
• Ví dụ: 
// Phát sinh một “mầm” ngẫu nhiên
$seed = (float) microtime()*100000000;
// Khởi tạo bộ phát sinh số ngẫu nhiên
srand($seed);
// In số ngẫu nhiên
print rand(); // Giá trị ngẫu nhiên từ 0 đến getmaxrand( )
print rand(1, 6); // Giá trị ngẫu nhiên từ 1 đến 6
Tra hướng dẫn
trong PHP Manual
3. Kiểu dữ liệu (tt)
27
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'
printf("%%b = '%b'\n", $n);
printf("%%c = '%c'\n", $c);
printf("%%d = '%d'\n", $n);
printf("%%e = '%e'\n", $n);
printf("%%u = '%u'\n", $n);
printf("%%u = '%u'\n", $u);
printf("%%f = '%f'\n", $n);
printf("%%o = '%o'\n", $n);
printf("%%s = '%s'\n", $n);
printf("%%x = '%x'\n", $n);
printf("%%X = '%X'\n", $n);
printf("%%+d = '%+d'\n", $n);
printf("%%+d = '%+d'\n", $u);
?>
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
Hàm printf
3. Kiểu dữ liệu (tt)
28
STR_PAD_RIGHT : Thêm vào bên phải (mặc định)
STR_PAD_LEFT : Thêm vào bên trái
STR_PAD_BOTH : Thêm cả hai phía
Hàm str_pad
<?php
$input = "Alien";
echo str_pad($input, 10); // produces "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Alien___"
echo str_pad($input, 6 , "___"); // produces "Alien_"
?>
4. Biến
29
• Cú pháp: $ten_bien = value;
• Không khai báo kiểu dữ liệu
• Biến tự động được khởi tạo khi gán giá trị lần đầu
• Tên biến
– Bao gồm các ký tự (A..Z, a..z), ký số(0..9),_
– Không được bắt đầu bằng ký số (0..9)
– Phân biệt chữ hoa – chữ thường
• Ví dụ:
– Đúng cú pháp: $hoten, $_pass
– Sai cú pháp: $2host
4. Biến – Hằng
30
• Variable variables
– Cho phép thay đổi tên biến
– Vídụ
<?php
$varname=“Bien_moi”;
$$varname= “xyz”; //$Bien_moi= “xyz”
?>
• Hằng số - Constants
<?php
define("MY_CONST", 10);
echo MY_CONST;
?>
5. Toán tử
31
Loại Toán tử Ghi chú
new . 
. [ ] ( )
Toán học + - * / % ++ --
So sánh = != == === !==
Luận lý && || ?: ,
Xử lý bit ! ~ > >>> 
AND OR XOR
Gán = += -= *= /= %= 
>>= <<= &= |= ^= .=
Ép kiểu (kiểu dữ liệu) (int) (double) (string)
5. Toán tử (tt)
32
Ex Name Result
$a == $b Equal TRUE if $a is equal to $b.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type. (PHP 4) 
$a != $b Not equal TRUE if $a is not equal to $b.
$a $b Not equal TRUE if $a is not equal to $b.
$a !== $b Not identical TRUE if $a is not equal to $b, or they are not of the same type. (PHP 4) 
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than or equal to TRUE if $a is less than or equal to $b.
$a >= $b Greater than or equal to TRUE if $a is greater than or equal to $b.
6. Chuỗi
• Toán tử nối chuỗi “.”
$str=“Hello “ . ”World!”; //$str = “Hello World!”;
• Phân biệt dấu nháy đơn, dấu nháy kép
$user = “Mr Bean”;
print ‘Hi $user’; // Hi $user
print “Hi $user”; // Hi Mr Bean
print “Hi”. $user; // ????
print “Hi”. “$user”; // ????
33
6. Chuỗi (tt)
• Giới hạn bởi nháy đơn (‘) hoặc kép (“)
• Chuỗi đặt trong nháy kép bị thay thế và xử 
lý ký tự thoát. Trong nháy đơn thì không.
• Ví dụ:
$a = “Hello”;
$b = “$a world”; //tương đương $b=“Hello 
world”
$c = ‘$a world’; //$c=‘$a world’ (không 
thay đổi)
34
6. Chuỗi (tt)
• Để làm rõ các biến trong chuỗi, cần bao 
biến vào giữa cặp ngoặc nhọn { }
$a = “He”;
$b = “$allo”; //lỗi vì PHP hiểu là 
$allo
$c = “{$a}llo”; //đúng ($c = 
“Hello”)
35
6. Chuỗi (tt)
• Ký tự thoát: \
– Sử dụng để viết các ký tự đặc biệt trong chuỗi
– VD:
Cần có chuỗi: Người ta nói “PHP rất tốt”
$a = “Người ta nói “PHP rất tốt””; //Sai
$a = “Người ta nói \“PHP rất tốt\””; 
//Đúng
– Một số ký tự phải sử dụng ký tự thoát: $, \, “
– Ngoài ra:
• \n: Xuống dòng
• \r: trở về đầu dòng
• \t: dấu tab
• 
36
6. Chuỗi (tt) – Kiểu tài liệu (heredoc)
– Cho phép viết 1 chuỗi trên nhiều dòng.
– Không cần sử dụng ký tự thoát:
– Cách viết:
$biến = <<<Ký_hiệu
nội dung trên nhiều dòng
Ký_hiệu;
– Chú ý: Ký_hiệu phải được viết ở ký tự đầu tiên của 
dòng
– Ví dụ:
$a = <<<EOD
Đây là chuỗi nằm trên nhiều dòng sử 
dụng cú pháp kiểu tài liệu ‘heredoc’
EOD; 37
6. Chuỗi (tt) – Kiểu tài liệu (heredoc)
38
<?php
$str = <<<EOA
Example of string 
spanning multiple lines
using heredoc syntax.
EOA;//không được có khoảng trắng đầu dòng
echo($str);
$name = “mr bean";
$d = date("d/m/y");
$str = <<<EOQ
This is a lecture of $name.
Ngay $d
EOQ;
echo($str);
?>
6. Chuỗi (tt) – Hàm xử lý
• Các xử lý cơ bản
– strlen($chuỗi)
– substr($chuỗi, $vị trí, $chiều_dài) 
– strtoupper ($chuỗi)
– strtolower ($chuỗi)
– iconv(mã nguồn, mã đích, $chuỗi)
– trim($chuỗi, ’ký tự muốn cắt’)
– ltrim($chuỗi, ’ký tự muốn cắt’)
– rtrim($chuỗi, ’ký tự muốn cắt’)
39
6. Chuỗi (tt)
• Tìm kiếm
– strpos($chuỗi, $chuỗi_con, $vị_trí_bắt đầu)
– strrpos ($chuỗi, $chuỗi_con, $vị_trí_bắt đầu)
• So sánh
– strcmp($chuỗi_1, $chuỗi_2)
– strncmp($chuỗi_1, $chuỗi_2, $chiều_dài)
– strcasecmp($chuỗi_1, $chuỗi_2)
– strncasecmp($chuỗi_1, $chuỗi_2, $chiều_dài)
– strnatcmp($chuỗi_1, $chuỗi_2)
– strnatcasecmp($chuỗi_1, $chuỗi_2)
40
6. Chuỗi (tt)
41
<?php
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
?>
<?php
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user,$pass,$uid,$gid,$gecos,$home,$shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>
Xử lý chuỗi
7. Mảng
42
<?php
$colors = array('red', 'blue', 'green', 'yellow');
sort($colors);
foreach ($colors as $color)
{
echo "Do you like $color?";
}
$num = count($colors);
echo “We have $num items”;
?>
Do you like blue? 
Do you like green? 
Do you like red? 
Do you like yellow? 
We have 4 items 
7. Mảng (tt)
43
<?php
// PHP 5
foreach ($colors as &$color) {
$color = strtoupper($color);
}
unset($color); /* ensure that following writes to
$color will not modify the last array element */
// Workaround for older versions (phiên bản trước PHP 5)
foreach ($colors as $key => $color) {
$colors[$key] = strtoupper($color);
}
print_r($colors);
?>
Array
(
[0] => RED
[1] => BLUE
[2] => GREEN
[3] => YELLOW
)
7. Mảng (tt)
44
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
Union of $a and $b:
array(3)
{
["a"]=> string(5) "apple"
["b"]=> string(6) "banana"
["c"]=> string(6) "cherry"
}
Union of $b and $a:
array(3)
{
["a"]=> string(4) "pear"
["b"]=> string(10) "strawberry"
["c"]=> string(6) "cherry"
} 
7. Mảng (tt)
45
<?php
/* Suppose that $var_array is an array returned from
wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";
?>
blue, large, sphere, medium 
7. Mảng (tt)
46
<?php
$info = array('coffee', 'brown', 'caffeine');
// Listing all the variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";
// Listing some of them
list($drink, , $power) = $info;
echo "$drink has $power.\n";
// Or let's skip to only the third one
list( , , $power) = $info;
echo "I need $power!\n";
// list() doesn't work with strings
list($bar) = "abcde";
var_dump($bar); // NULL
?>
7. Mảng (tt) – Hàm xử lý
• Sắp xếp
Theo giá trị
– sort($mảng) / asort($mảng) // tăng dần
– rsort($mảng) / arsort($mảng) // giảm dần
– natsort($mảng) / natcasesort($mảng)// tăng dần, dùng cho chuỗi
– usort($mảng, ”hàm_so_sánh”) // tự định nghĩa thứ tự
– uasort($mảng, ”hàm_so_sánh”) // tự định nghĩa thứ tự
Theo khóa
– ksort($mảng) // tăng dần
– krsort($mảng) // giảm dần
– uksort($mảng, ”hàm_so_sánh”) // tự định nghĩa thứ tự
47
7. Mảng (tt) – Hàm xử lý
• Nối ghép hai mảng
array_merge($mảng1, $mảng2)
array_combine($mảng1, $mảng2)
array_intersect($mảng1, $mảng2)
• Tìm kiếm
array_search($giá_trị, $mảng)
48
Break
8. Cấu trúc điều khiển
• Điều kiện if
• Điều khiển switch
• Vòng lặp for
• Vòng lặp while
• Vòng lặp do.. While
• Vòng lặp foreach
• Từ khóa break, continue
50
Tương tự như C++
51
8.1 Câu lệnh if
if (biểu thức điều kiện)
khối lệnh 1
else
khối lệnh 2
52
8.1 Câu lệnh if (tt)
if ($a > $b) {
echo "a > b";
$a = $b;
} else {
echo "a <= b";
$b = $a;
}
53
8.2 Câu lệnh switch
switch (biểu thức)
{
case biểu thức 1:
khối lệnh 1
case biểu thức 2:
khối lệnh 2
...
case biểu thức n:
khối lệnh n
default:
khối lệnh cuối
} 
54
8.2 Câu lệnh switch (tt)
switch ($a) {
case 0: 
echo "a = 0";
break;
case 1: 
echo "a = 1";
break;
}
55
8.3 Vòng lặp while/do...while
while (biểu thức điều kiện)
khối lệnh
Hay:
do
khối lệnh
while (biểu thức điều kiện); 
Ví dụ vòng lặp while
56
Ví dụ:
$i = 1; $j = 9;
while ($i <= 10) {
$temp = $i * $j;
print “$j * $i = $temp";
$i++;
}
57
8.3 Vòng lặp while/do...while (tt)
while ($i++ < 5) {
switch ($i) {
case 2:
echo "At 2"; break;
case 5:
echo "At 5"; break 2;
default:
break;
}
}
58
8.4 Vòng lặp for
for (biểu thức 1; biểu thức 2; biểu thức 3)
khối lệnh;
• biểu thức 1: thực hiện 1 lần khi bắt đầu vòng lặp
• biểu thức 2: điều kiện lặp, được xem xét trước mỗi lần 
lặp
• biểu thức 3: thực hiện sau mỗi lần lặp
8.4 Vòng lặp for (tt)
59
 Ví dụ:
print “”;
for ($i = 1; $i <= 12; $i++) {
print “$i”;
} 
print “”;
60
8.5 Lặp với for & foreach
for ($i=1, $j=0; $i<=10; $j+=$i, print
$i, $i++);
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
$arr = array("one", "two", "three");
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value";
}
8.5 Lặp với for & foreach (tt)
61
foreach (array as variable) 
{
statements
}
Ví dụ:
$meal = array('breakfast' => 'Walnut Bun',
'lunch' => 'Cashew Nuts and White Mushrooms',
'dinner' => 'Eggplant with Chili Sauce');
print "\n";
foreach ($meal as $key => $value) {
print "$key$value\n";
}
print '';
62
8.6 Các lệnh ngắt lặp
• break
Ngưng và thoát ra khỏi vòng lặp hiện tại
• continue
Ngưng thực hiện lần lặp hiện hành để chuyển 
sang lần lặp tiếo theo
63
8.7 Ví dụ
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>
<?php
$arr = array("one", "two", "three");
reset($arr);// reset pointer, start again on first element
while (list(, $value) = each($arr)) {
echo "Value: $value\n";
}
foreach ($arr as $value) {
echo "Value: $value\n";
}
?>
64
8.7 Ví dụ (tt)
<?php
$arr = array("one", "two", "three");
reset($arr);
while (list($key, $value) = each($arr)) {
echo "Key: $key; Value: $value\n";
}
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value\n";
}
?>
Key: 0; Value: one
Key: 1; Value: two
Key: 2; Value: three
Key: 0; Value: one
Key: 1; Value: two
Key: 2; Value: three
65
9. Hàm
<?php
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
$input = array(4,7);
takes_array($input);
?>
<?php
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;// outputs 'This is a string, and something extra.'
?>
lưu ý: dấu &
66
9. Hàm
function functionName ([parameter1]...[,parameterN]) 
{
statement[s] ;
}
function functionName ([parameter1]...[,parameterN]) 
{
statement[s] ;
return .. ;
}
• Gọi hàm
Nhập tên hàm (không phân biệt chữ in hoa-thường) và 
cung cấp đầy đủ các tham số cần thiết trong cặp dấu ()
67
9. Hàm
• Kết thúc và trả kết quả
Lệnh return dùng để kết thúc và trả kết quả cũng như
quyền điều hiển lại cho nơi đã gọi hàm. Nếu không có
lệnh return thì mặc định hàm trả về giá trị NULL.
Muốn trả về hơn một giá trị thì phải dùng mảng
• Truyền tham số
Mặc định các tham số được truyền vào bên trong hàm
theo phương pháp tham trị. Trường hợp muốn thay đổi
trực tiếp trên các tham số truyền thì người ta dùng
phương pháp tham chiếu, thêm dấu & trước tên tham số
(khi định nghĩa) cũng như tên biến được truyền làm
tham (khi gọi hàm)
68
9. Hàm
• Tham số có giá trị mặc định
Tương tự cách khai báo và gán giá trị đầu tiên cho biến,
thông thường loại tham số này nên đặt cuối trong danh
sách tham số
Khi gọi hàm nếu bỏ trống tại vị trí tham số có giá trị mặc
định thì mặc nhiên giá trị mặc định được dùng cho tham
số đó
• Hàm có số lượng tham số không xác định
Khai báo danh sách tham số rỗng ()
Sử dụng các hàm sau để lấy danh sách các tham số:
func_num_args(): số lượng tham số khi hàm được gọi
func_get_arg(i): giá trị các tham số thứ i được truyền (bắt 
đầu từ 0)
func_get_args(): danh sách tất cả các tham số
69
9. Hàm
• Biến tĩnh
Thêm từ khóa static khi khai báo biến
Được khởi tạo (và gán giá trị) một lần đầu tiên duy 
nhất trong suốt quá trình thực thi của script
• Sử dụng biến toàn cục
Khai báo lại biến toàn cục với từ khóa global (bên 
trong hàm) để có thể sử dụng được biến toàn cục này 
bên trong hàm
Sử dụng các hàm sau để lấy danh sách các tham số:
func_num_args(): số lượng tham số khi hàm được gọi
func_get_arg(i): giá trị các tham số thứ i được truyền 
(bắt đầu từ 0)
func_get_args(): danh sách tất cả các tham số
70
9. Hàm
• Phạm vi
Có giá trị sử dụng trong toàn script, ngay cả 
trước và sau khi định nghĩa
• Lồng hàm
Cho phép định nghĩa lồng hàm, thậm chí lồng 
bên trong một cấu trúc điều khiển (if, switch, 
while/do, while)
Loại hàm này có phạm vi trong toàn script và 
không thể định nghĩa lại
71
9. Hàm
<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>
<?php
function makecoffee($types = array("cappuccino"), $coffeeMaker = NULL)
{
$device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;
return "Making a cup of ".join(", ", $types)." with $device.\n";
}
echo makecoffee();
echo makecoffee(array("cappuccino", "lavazza"), "teapot");
?>
72
9. Hàm
<?php
function makeyogurt($type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt("raspberry");// won't work as expected
?>
<?php
function makeyogurt($flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt("raspberry"); // works as expected
?>
73
9. Hàm
<?php
function square ($num)
{
return $num * $num;
}
echo square (4);//outputs '16‘
?>
<?php
function small_numbers()
{
return array (0, 1, 2);
}
list($zero,$one,$two)=small_numbers();
?>
<?php
function &returns_reference()
{
return $someref;
}
$newref=&returns_reference();
?>
74
9. Hàm
<?php
function foo() {
echo "In foo()\n";
}
function bar($arg = '')
{
echo "In bar(); argument was '$arg'.\n";
}
// This is a wrapper function around echo
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
$func = 'echoit';
$func('test'); // This calls echoit()
?>
75
9. Hàm
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // This calls the Bar() method
}
function Bar()
{
echo "This is Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // This calls $foo->Variable()
?>
76
10. Phạm vi của biến
<?php
$a = 1; $b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
} 
Sum();
echo $b;
?>
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 
Sum();
echo $b;
?>
3
77
10. Phạm vi của biến
<?php
$a = 1;
include "b.inc";
?>
Phạm vi của biến [a] có tác dụng trong cả b.inc
----------------------------------------------
<?php
$a = 1; // global scope
function Test()
{
echo $a;// reference to local scope variable
}
Test();
?>
Biến [a] ở ngoài và trong hàm Test khác nhau
78
10. Phạm vi của biến
Tên biến Mô tả
$GLOBALS
chứa tất cả các biến toàn cục mà đoạn script cục bộ 
có thể truy cập
$_SERVER chứa thông tin về môi trường của web server
$_GET chứa thông tin của yêu cầu dạng GET
$_POST chứa thông tin của yêu cầu dạng POST
$_COOKIE chứa thông tin từ HTTP cookie
$_FILE chứa thông tin từ việc tải tập tin lên kiểu POST
$_ENV
chứa thông tin về môi trường thực thi của đoạn 
script
$_REQUEST chứa thông tin nhập vào của người dùng
$_SESSION chứa thông tin của các session được đăng ký
79
Ví dụ:
<?php
function Test()
{
$a = 0;
echo $a;
$a++;
}
Test();
Test(); 
?>
<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
Test();
Test(); 
?>
?
Tham khảo
• Website W3school
• Slide lập trình Web, ĐH KHTN, 2007
80
Q & A
THE END

File đính kèm:

  • pdfbai_giang_phat_trien_ung_dung_web_web_programming_chuong_9_p.pdf