• Biến:
Là vùng nhớ lưu trữ dữ liệu tạm thời và giá trị có thể thay đổi được. Biến trong PHP được bắt đầu bằng kí hiệu $ ở trước tên biến (viết liền) và phân biệt chữ hoa và chữ thường. Tên của biến hợp lệ bắt đầu bằng kí tự hay dấu gạch dưới và theo sau là các ký tự, số hay dấu gạch dưới. Trong PHP mỗi biến khi sử dụng không cần khai báo trước. Tuy nhiên ta thường sử dụng khai báo song song với lệnh gán giá trị khởi động cho biến. Một biến trong PHP có thể lưu giữ bất cứ kiểu dữ liệu nào và có thể thay đổi sang kiểu dữ liệu khác tuỳ từng thời điểm.
Khai báo biến
Cú pháp: $tên_biến = giá trị; Ví dụ:
<?
$a = 1; // Biến a chứa một số nguyên
$a = “Hello!”; // Biến a bây giờ chứa một chuỗi.
bienB = 12; // Lỗi. Biến luôn phải có dấu dollas ($) ở trước. $1c = “abc”; //Lỗi, do phần tên biến bắt đầu bằng 1 số. ?>
Kiểm tra trạng thái của biến:
Khi truy cập đến một biến chưa được khai báo, chương trình sẽ báo lỗi. Để tránh điều này ta sử dụng hàm isset(tênbiến). Hàm sẽ trả về true nếu biến đã tồn tại, ngược lại, trả về giá trị false.
Để huỷ không sử dụng và giải phóng vùng nhớ cho một biến nào đó, ta có thể sử dụng hàm unset (tênbiến). Khi đó biến này có trạng thái tồn tại là false.
Hàm empty(“tênbiến”): Trả về true nếu biến không tồn tại, có giá trị bằng 0 hay giá trị rỗng (có chiều dài = 0). Ngược lại, trả về false.
Ví dụ:
<?php
$var = 0;
if (empty($var))
{ //valuates true. Var’s value = 0
echo "<br>1. Var is either 0 or not at all set"; }
if (!isset($var))
{ // evaluates false. isset($var) is true, !isset($var) is false. echo "<br>2. The Var is not set at all";
}
$var ="";
if (empty($var))
{ //evaluates true. Length of var’s value is 0. echo "<br>3.Var is either 0 or not at all set"; }
$var ="123"; if (empty($var)) { //evaluates false
echo "<br>4. Var is either 0 or not at all set"; }
unset($var);
if (isset($var)==false) // !isset($var) echo "<br>5. Var is not set or unset()."; else
echo "<br>5. Var’value is $var"; if (empty($var))
echo "<br>6. Var is either 0 or not at all set"; ?>
Kết quả hiển thị:
1. Var is either 0 or not at all set 3.Var is either 0 or not at all set 5. Var is not set or unset(). 6. Var is either 0 or not at all set • Các kiểu dữ liệu trong PHP
Giống như các ngôn ngữ lập trình, trong php có các kiểu dữ liệu cơ bản như integer (int): Sử dụng hầu hết cho các dữ liệu kiểu số nguyên, double (float) dùng trong lưu trữ các số thực. Ngoaì các kiểu dữ liệu cơ bản ra, php cũng cung cấp các kiểu dữ liệu phức tạp hơn như String, Date, Array và Object.
- Số nguyên (Interger): Sử dụng cho giá trị có kiểu dữ liệu là số nguyên $a = 1234; //Số nguyên dương
$a = -123; # Số âm
// Số nguyên hệ octal (cơ số 8) tương đương số 83 của hệ cơ số 10 $a = 0123;
// Tạo số hexadecimal (tương đương số 18 cơ số 10) $a = 0x12;
- Số thực (Double): Sử dụng cho các giá trị có kiểu là số thực. Ví dụ:
$a = 1.234; $a = 1.2e3;
- Mảng (Array): Lưu trữ một tập hợp các giá trị.
- Chuỗi (String): Sử dụng cho các giá trị là chuỗi, ký tự. Một chuỗi được bao bởi cặp dấu nháy đôi (“ “) hay cặp dấu nháy đơn (‘ ‘).
Ví dụ 2 biến $S1 và $S2 chứa 2 chuỗi: $S1 = ’String 1’;
$S2 = “String 2”;
- Object: Sử dụng cho các dữ liệu là đối tượng của lớp.
Kiểu của biến thường không được xác định bởi người lập trình mà nó được quyết định tại thời điểm chạy chương trình và phụ thuộc vào ngữ cảnh của biến đang sử dụng.
- Khi chuỗi là một chuỗi số: Chuỗi sẽ là một số thực nếu có chứa ký tự ‘.’, ‘e’, hay ‘E’. Nếu không, giá trị là số nguyên.
- Nếu chuỗi khởi đầu bằng dữ liệu số, dữ liệu này sẽ được sử dụng. Ngược lại, giá trị được sử dụng là 0.
Ví dụ:
$foo = 1 + "10.5"; // $foo is double (11.5) $foo = 1 + "-1.3e3"; // $foo is double (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 1 + "10 Little Piggies"; // $foo is integer (11) $foo = "10.0 pigs " + 1; // $foo is integer (11) $foo = "10.0 pigs " + 1.0; // $foo is double (11) $foo = "10.0 pigs " + 1.0; // $foo is double (11)
Các hàm kiểm tra kiểu
Để kiểm tra kiểu của môt biến, có thể sử dụng một số hàm viết sẵn trong ngôn ngữ. Các hàm này trả về các giá trị boolean (true, false).
• is_int($s): Kiểm tra biến $s có phải là số nguyên hay không. • is_float($s): Kiểm tra biến $s có phải là biến float hay không. • is_double($s): Kiểm tra biến $s có phải là biến double hay
không
• is_string($s): Kiểm tra biến $s có phải là biến string hay không • is_array($s): Kiểm tra biến $s có phải là biến array hay không
Chuyển đổi kiểu
Trong quá trình tính toán đôi khi ta cần chuyển đổi kiểu dữ liệu cho biến. Để chuyển đổi kiểu dữ liệu cho một biến nào, ta đặt tên kiểu dữ liệu trước biến đó theo cú pháp:(tênkiểu) tên_biến.
Ví dụ: <?
$seconds = 155;
$minutes = (int) ($seconds / 60); // Chuyển đổi sang số nguyên echo $minutes; //2
$s=4; // s là kiểu nguyên
if (is_float($s)) echo ”Biến s kiểu float”; else echo ”Biến s không phải kiểu float”; $s = (float)$s;
if (is_float($a)) echo "Biến s kiểu float"; ?>
• Hằng
Hằng số là đơn vị lưu trữ dữ liệu như biến, tuy nhiên giá trị của hằng sẽ được gán một lần và sẽ không được thay đổi. Hằng trong PHP được định nghĩa bởi hàm define theo cú pháp: define (string tên_hằng, giá_trị_hằng ).
Định nghĩa một hằng cũng như một biến. Tuy nhiên, với hằng thì: - Không có dấu $ ở trước tên hằng.
- Hằng có thể truy cập bất cứ vị trí nào mà không quan tâm tới tầm vực của nó. - Không thể gán lại giá trị.
Ví dụ:
<?php /*
Định nghĩa một hằng số có tên là CONSTANT và hằng này được gán giá trị là chuỗi "Hello world."
*/
define ("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." ;
//Định nghĩa hằng thứ 2 tên PI và gán giá trị số thực là 3.1416 define ("PI", 3.1416);
echo "<br>DT hinh tron ban kinh 2 la:" .(2*2*PI); //Outputs: DT hinh tron ban kinh 2 la:12.5664 ?>
8.2 Biểu Thức - Phép Toán
Cũng như các ngôn ngữ lập trình khác, trong PHP cũng có các phép toán cơ bản cho số học, các phép toán logic, các phép toán trong thao tác chuỗi, mảng…
8.2.1 Các Phép Toán Số Học
Bao gồm các phép toán thông thường trong các phép toán mà toán hạng là các số. Ký hiệu và ý nghĩa các phép toán được trình bày trong bảng dưới:
Toán tử Tên Giá trị
biến Ví dụ Kết quả + Cộng $a=6; $b=5; $c = $a + $b $c = 11. - Trừ $c = $a - $b $c =.1 * Nhân $c = $a * $b $c = 30. / Chia $c = $a / $b $c = 1.2 % Lấy dư $c = $a % $b $c = 1
Toán tử thao tác trên chuỗi: Toán tử nối chuỗi (“.”): Dùng để nối hai chuỗi. Ví dụ:
<?
$a = "Hello ";
$b = $a . "World!"; // now $b = "Hello World!" ?>
Phép toán gán: (=): Dùng để gán một giá trị, một biểu thức cho một biến <?
$a = “hello!”; // gán chuỗi ‘Hello!” cho biến $a;
?>
Các phép gán kết hợp
Phép toán Ví dụ Lý giải
++ $a++ Tương đương $a = $a + 1 -- $a-- Tương đương $a = $a - 1 += $a += $b Tương đương: $a = $a + $b -= $a -= $b Tương đương: $a = $a - $b *= $a *= $b Tương đương: $a = $a * $b /= $a /= $b Tương đương: $a = $a / $b %= $a %= $b Tương đương: $a = $a % $b .= $a .= $b Tương đương: $a = $a . $b Ví dụ: <? $a = 3; $b = $a++; // $a = 4, $b = 3 $b = 6; $c = $b/$a; // $c = 1.5 $c = (int ) $c; // $c = 1 $b /= $a; // $b = 1.5
$c = “abc” . ($a +2); // $c = “abc6” ?>
8.2.2 Các Phép Toán Logic
Phép toán thao tác trên các toán hạng kiểu boolean và trả về một giá trị boolean (true hay false).
Chú ý: trong các phép toán logic, so sánh, các giá trị 0 (với số) và rỗng (“”- với chuỗi) tương ứng với gía trị false, ngược lại, chúng có giá trị true.
Phép toán Tên Giá trị Ví dụ Lý giải Kết quả
and And
$a=true; $b=false;
$a and $b True nếu cả 2 $a và $b đều
đúng. false
or Or $a or $b True nếu $a hoặc $b đúng. true xor xOr $a xor $b True nếu một trong 2 giá trị $a
hoặc $b đúng
true
&& And $a && $b True nếu cả 2 $a và $b đều đúng
false || Or $a || $b True nếu $a hoặc $b đúng. true
8.2.3 Phép Toán So Sánh
Phép toán
Tên Giá trị Ví dụ Lý giải Kết quả
= = So sánh bằng $a = true; $a == 1 True nếu a bằng $b true = = = So sánh bằng $a ===1 Giống === nhưng chỉ sử
dụng cho cùng kiểu dữ liệu.
false
!= So sánh khác $a = 5;
$b = 6 $a != $b True nếu $a khác $b. true < So sánh nhỏ
hơn
$a< $b True nếu $a nhỏ hơn $b. true > So sánh lớn hơn $a > $b True nếu $a lớn hơn $b. false <= So sánh nhỏ
hơn hay bằng $a <= $b True nếu $a nhỏ hơn hay bằng b. true >= So sánh lớn hơn
ha bằng $a >= $b True nếu $a lớn hơn hay bằng b. false
8.2.4 Phép Toán ?:
Cú pháp: Biểu thức logic? Biểu thức 1: Biểu thức 2;
Ta thường sử dụng phép toán này thay cho phát biểu if, else. Phép toán nhận biểu thức logic. Nếu biểu thức này đúng, giá trị của biểu thức 1 được trả về, ngược lại, giá trị biểu thức 2
được trả về. <?
$a = 4; $b=5;
$c = ($a>$b)? ($a ." Lon hon . $b"): ($a . " khong lon hon ". $b); echo $c; //Xuất câu: 4 khong lon hon 5
?>
8.2.5 Phép Toán Error:
Php cung cấp phép toán điều khiển một biểu thức khi lỗi xảy ra là phép toán @. Khi đặt ký hiệu này trước biểu thức, bất cứ lỗi nào phát sinh bởi biểu thức sẽ bị lờ đi mà không hiển thị các lỗi xuất hiện của hệ thống.
Ta xét 2 ví dụ a và b ở sau. Ở ví dụ b, ta sử dụng phép toán error @ để tránh in lỗi hệ thống đến người sử dụng.
a b.
<?php <?php
$b = 4; $b = 4;
$c = $b / $a; $c = @($b / $a);
echo "Gia tri cua c la : $c"; echo "Gia tri cua c la : $c"; echo "<br>Loi chia cho 0."; echo "<br>Loi chia cho 0.";
?> ?>
Ta cũng hay sử dụng phép toán này trong kết nối tới CSDL. <?php
$res = @mysql_query ("select name, code from 'namelist", $conn) or die ("Query failed");
?>
Câu truy vấn bị lỗi, chương trình sẽ hiển thị đoạn văn bản trong die là "Query failed”. 8.3 Các Phát Biểu
8.3.1 Phát Biểu Tuần Tự
Các câu lệnh trong php được thực thi tuần tự từ trên xuống dưới. Một tập hợp các câu lệnh đặt trong cặp dấu {} gọi là một khối lệnh. Khối lệnh cũng được xem như một câu lệnh đơn.
8.3.2 Phát Biểu Điều Kiện
• Phát biểu điều kiện if:
Là một trong những cấu trúc quan trọng trong các ngôn ngữ lập trình. Trong php, cấu trúc này tựa như ngôn ngữ C.
Cú pháp
if (Biểu_thức_ĐK) S;
Lệnh S sẽ được thi hành nếu Biểu_thức_ĐK có giá trị true. Biểu_thức_ĐK là một biểu thức điều kiện sẽ trả về các giá trị boolean. S là các câu lệnh đơn hay các câu lệnh kép.
if ($a > $b) echo "a is bigger than b";
sẽ in ra màn hình câu "a is bigger than b" nếu giá trị của biến $a lớn hơn giá trị của biến $b. • Biểu thức điều kiện if...else:
if (Biểu_thức_ĐK) S1;
else S2;
Nếu Biểu_thức_ĐK đúng,S1 được thi hành, ngược lại (Biểu_thức_ĐK sai), S2 được thi hành. S1 và S2 là các câu lệnh đơn hay khối lệnh.
Elseif: Kết hợp giữa if và else. if (Biểu_thức_ĐK_1) S1; elseif (Biểu_thức_ĐK_2) S2 else S3;
Nếu biểu Biểu_thức_ĐK_1 đúng, S1 được thi hành, ngược lại nếu Biểu_thức_ĐK_2 đúng thì S2 được thi hành, ngược lại S3 được thi hành. Đây chính là cách viết khác của biểu thức if..else lồng nhau: if (Biểu_thức_ĐK_1) S1; else { if (Biểu_thức_ĐK_2) S2 else S3; } Ví dụ: giải phương trình bậc 2: ax2 + bx + c = 0; <?php $a = 1; $b = 4; $c = 1; //Tạo chuỗi phương trình để in
$pt = "<b>" . $a ."x<sup>2 </sup>+ ". $b. "x + " .$c. " = 0 </b>"; //Không giải nếu phương trình là phương trình bậc nhất.
if ($a==0) echo "Đây là phương trình bậc nhất!"; else
{
$delta = $b * $b - 4*$a*$c;
if ($delta < 0) printf ("Phương trình %s vô nghiệm!", $pt); elseif ($delta == 0)
printf("Phương trình %s có một nghiệm kép x= %.2f", $pt, (-$b/(2*$a))); else
{
$x1 = (-$b + sqrt($delta))/(2*$a); $x2 = (-$b - sqrt($delta))/(2*$a);
printf("Phương trình %s có 2 nghiệm phân biệt:", $pt); printf("x1= %.2f và x2= %.2f", $x1, $x2);
} } ?>
• Phát biểu switch:
Giống như phát biểu if, nhưng khi có nhiều sự lựa chọn, ta có thể sử dụng phát biểu switch để thay thế.
switch (biến) {
case giátrị_1: S1; break; case giátrị_2: S2; break; case: giá trị_n: Sn; break; [defaul: Sn+1]
}
Kiểm tra biến, nếu biến bằng giá trị giátrị_i (i=1 .. n) sẽ thi hành lệnh (hay khối lệnh Si. Ngược lại, sẽ thi hành lệnh Sn+1. Sau mỗi câu lệnh Si, ta sử dụng phát biểu break; để thoát khỏi switch. Nếu không có break sau lệnh Si, chương trình sẽ thi hành lệnh Si+1 khi đã thi hành Si.
Ví dụ: Sử dụng cả hai phát biểu if và switch cho cùng một bài toán. <?
$i = 2; if ($i == 0) {
print "i equals 0"; }
if ($i == 1) {
print "i equals 1"; }
if ($i == 2) {
print "i equals 2"; }
?>
Nếu thay đọan mã trên bằng <?
$i=1; switch ($i) {
case 0:
print "<br>i equals 0"; case 1:
print "<br>i equals 1"; case 2:
print "<br>i equals 2";
default: print "<br>i is not equal to 0, 1 or 2"; } ?> Kết quả sẽ in ra 3 dòng: i equals 1 i equals 2 i is not equal to 0, 1 or 2
8.3.3 Các Phát Biểu Lặp
Giống như ngôn ngữ c, php cũng cung cấp các phát biểu lặp for, while, do .. while để cho phép thức thi lặp lại các câu lệnh.
• Vòng lặp for:
Thường sử dụng trong các phát biểu lặp biết trước số lần lặp. Có cấu trúc cú pháp như sau: for (expr1; expr2; expr3) S;
Trong đó expr1; expr2; expr3 là các biểu thức. S: là các câu lệnh.
Thực thi vòng lặp này, expr1 được thực thi trước tiên và duy nhất một lần. Thường đây là biểu thức để gán giá trị cho biến lặp. Bắt đầu ở mỗi vòng lặp, expr2 được thi hành. Nếu giá trị trả về của biểu thúc này là false, vòng lặp dừng. Nếu giá trị trả về là true, lệnh S được thi hành. Cuối cùng thì expr3 được thi hành. Thông thường đây là biểu thức thay đổi biến điều khiển trong vòng lặp. Các biểu thức ở trên có thể rỗng, khi đó ta có thể sử dụng toán tử break; để thoát khỏi vòng lặp.
Ví dụ: Sau sử dụng vòng lặp for để hiển thị bảng cửu chương 6. <?
$n = 6;
$S = "<table border=1>";
$S .="<tr><td colspan=3> Bảng cửu chương $n </td></tr>"; for($i=1; $i<=10; $i++)
{ $S .="<tr><td> " .$n ."</td>"; $S .="<td> " .$i ."</td>"; $S .="<td> " .($n*$i) ."</td>"; } $S .= "</table>"; echo $S; ?>
Vòng lặp cũng có thể lồng nhau. Ví dụ sau sẽ in ra bảng cửu chương từ 2 đến 5 <body> <table bgcolor="#faebd7"><tr> <? for($n= 2; $n<=5; $n++) { ?> <td><? $S = "<table border=1>";
$S .="<tr><td colspan=3> Bảng cửu chương $n </td></tr>"; for($i=1; $i<=10; $i++)
{
$S .="<tr><td> " .$n ."</td>"; $S .="<td> " .$i ."</td>";
$S .="<td> " .($n*$i) ."</td>"; } $S .= "</table>"; echo $S; ?></td> <? } ?></tr></table> </body>
Kết quả nhận được từ hiển thị của trình duyệt: Bảng cửu chương 2 2 1 2 2 2 4 2 3 6 2 4 8 2 5 10 2 6 12 2 7 14 2 8 16 2 9 18 2 10 20 Bảng cửu chương 3 3 1 3 3 2 6 3 3 9 3 4 12 3 5 15 3 6 18 3 7 21 3 8 24 3 9 27 3 10 30 Bảng cửu chương 4 4 1 4 4 2 8 4 3 12 4 4 16 4 5 20 4 6 24 4 7 28 4 8 32 4 9 36 4 10 40