Cùng với Apache, PHP và MySQL đã trở thành chuẩn trên các máy chủ Web. Rất nhiều phần mềm Web mạnh sử dụng PHP và MySQL (PHP Nuke, Post Nuke, vBulletin…).
PHP là ngôn ngữ có cú pháp gần giống Perl nhưng tốc độ dịch của nó được các chuyên gia đánh giá là nhanh hơn ASP 5 lần, chạy trên nhiều hệ điều hành như Unix, Window, Linux nó hỗ trợ kết nối các hệ cơ sở dữ liệu lớn như MySQL, ngoài ra nó còn được Apache hỗ trợ như là một modul cơ bản.
a. PHP là gì?
PHP (Personal Home Page) được giới thiệu năm 1994 bởi R.Lerdoft, như một bộ sưu tập của một ngôn ngữ chưa chặt chẽ dựa vào Perl và các công cụ của trang chủ. Vì quá trình xử lý dựa trên máy chủ nên các trang Web được viết bằng PHP sẽ dễ nhìn hơn ở bất cứ hệ điều hành nào. Nói một cách ngắn gọn: PHP là một ngôn ngữ lập trình kiểu script, chạy trên Server và trả về mã HTML cho trình duyệt. Xu hướng sử dụng PHP trong việc thiết kế Web đang ngày càng phát triển trong giai đọan hiện nay và trong tương lai.
Tới năm 1998, việc công bố phiên bản 3 thị PHP mới chính thức phát triển theo hướng tách riêng của mình. Giống như C và Perl, lúc này nó đã là một ngôn ngữ lập trình có cấu trúc và tính năng đa dạng, chính vì thế đã khuyến khích các nhà thiết kế Web sử dụng PHP. Nó có thể cung cấp một lượng cơ sở dữ liệu khá đồ sộ gồm cả MySQL, mSQL, dbm, Hyperwave, Informix, Ocracle, nó cũng có thể làm việc với các hình ảnh, các file dữ liệu, FTP, XML, và host của các kỹ thuật ứng dụng khác.
Mã PHP được đặt trong một kiểu tag đặc biệt cho phép ta có thể vào hoặc ra khỏi chế độ PHP, cú pháp của PHP cơ bản cũng giống như một số ngôn ngữ lập trình khác, đặc biệt là C và Perl.
PHP được nhận dạng dưới 4 dạng phiên bản: a.Ví dụ:
<?php //bắt đầu php echo"Hello World"; ?> //Kết thúc php b.Ví dụ: <script language="php"> Echo"Hello,World"; </script> c.Ví dụ: <? Echo"Hello,World"; ?> d.Ví dụ: <% echo "Hello,World"; %>
Tuy nhiên phiên bản đầu tiên vẫn được ưa chuộng và dùng phổ biến hơn.
b. Cài đặt và cấu hình PHP
Việc cài đặt PHP trên Ubuntu vô cung đơn giản, trên cửa sổ Terminal ta gõ:
Tất cả chỉ có vậy, hệ thống sẽ tự động kết nối với kho phần mềm và tự động cài đặt và cấu hình.
c. Các kiểu dữ liệu:
Số nguyên:
Được khai báo và sử dụng giá trị giống như C: VD: $a=1234; $a = -123;
Số thực:
VD: $a= 1.323; $a=1.2e3;
Chú ý: Khi sử dụng các số thực tế để tính tóan, có thể làm mất giá trị của nó. Vì vậy, nên sử dụng các hàm tóan học trong thư viện chuẩn để tính toán. Xâu:
Có 2 cách để xác đinh 1 xâu: Đặt giữa 2 dấu nháy kép("") hoặc giữa 2 dấu nháy đơn ('').Chú ý là các biến giá trị sẽ không được khai triển trong xâu giữa 2 dấu ngoặc đơn.
Mảng:
Mảng thực chất là gồm 2 bảng: Bảng chỉ số và bảng liên kết
a. Mảng 1 chiều: Có thể dùng hàm list(), array() để liệt kê ca(c giá trị của từng phần tử trong mảng để tạo mảng. Có thể thêm các giá trị vào mảng để tạo thành 1 mảng --> Dùng giống trong C.
Có thể dùng các hàm asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), and uksort() để sắp xếp mảng. Tùy thuộc vào việc sắp xếp theo kiểu gì. b.Mảng nhiều chiều: Tương tự như C, có thể dùng như VD sau:
$a[1] = $f; $a["foo"] = $f; $a[1][0] = $f; $a["foo"][2] = $f; $a[3]["bar"] = $f;
PHP không yêu cầu phải khai báo trước kiểu dữ liệu cho các biến, kiểu dữ liệu của biến sẽ phụ thuộc vào kiểu dữ liệu mà ta gán cho nó.
VD :
$foo = "0"; // $foo là ký tự ASCII 48 $foo++; // $foo là xâu "1" (ASCII 49) $foo += 1; // $foo là số nguyên (2)
$foo = $foo + 1.3; // $foo là số thực (3.3)
$foo = 5 + "10 Little Piggies"; // $foo là số nguyên (15)
d. Biến - giá trị
PHP quy định một biến được biểu die?n bắt đầu bằng dấu $, sau đó là một chữ cái hoặc dấu gạch dưới.
ARGV: Mảng tham số truyền cho Script. Khi đọan Script chạy bằng dòng lệnh, tham số này sẽ được dùng giống như C để truy nhập các tham số dòng lệnh.
ARGC: Số các tham số được truyền, dùng chung với ARGV.
PHP_SELF: Tên của đọan mã Script đang thực hiện. Nếu PHP đang được chạy từ dòng lệnh thị tham số này không có giá trị.
HTTP_COOKIE_VARS: Một mảng các giá trị được truyền tới Script hiện tại bằng HTTP COOKIE. Chỉ có tác dụng nếu "track_vars" trong cấu hình được đặt hoặc chỉ dẫn <?php_track_vars?>.
HTTP_GET_VARS: Một mảng các giá trị được truyền tới Script hiện tại bằng HTTP GET. Chỉ có tác dụng nếu "track_vars" trong cấu hình được đặt hoặc chỉ dẫn <?php_track_vars?>.
HTTP_POST_VARS: Một mảng các giá trị được truyền tới Script hiện tại bằng HTTP POST. Chỉ có tác dụng nếu "track_vars" trong cấu hình được đặt hoặc chỉ dẫn <?php_track_vars?>.
Phạm vi giá trị:
PHP coi 1 biến có một giới hạn. Để xác định một biến toàn cục (global) có tác dụng trong một hàm, ta cần khai báo la?. Nếu không giá trị của biến sẽ được coi như là cục bộ trong hàm.
VD : $a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; }
Sum (); echo $b;
Khi có khai báo global ở trên, $a và $b được cho biết đó là những biến toàn cục. Nếu không có khai báo global, $a và $b chỉ được coi là các biến bên trong hàm Sum(). Điều này khác với C. Một cách khác để dùng biến toàn cục trong một hàm là ta dùng mảng $GLOBAL cuả PHP.Ví dụ trên có thể viết như sau:
$a = 1; $b = 2;
Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; }
Sum (); echo $b;
Một chú ý khác là khai báo static. Với khai báo này bên trong một hàm với một biến cục bộ, giá trị cuả biến cục bộ đó sẽ không bị mất khi đi ra khỏi hàm. VD : Function Test () { static $a = 0; echo $a; $a++; }
Với khai báo như trên, $a sẽ không mất đi giá trị sau khi thực hiện lời gọi hàm Test() mà $a sẽ được tăng lên 1 sau mỗi lần gọi hàm Test().
Tên biến:
Một biến có thể gắn với một cái tên VD:
$a = "hello"; $$a = "world"; => $hello = "world" và
echo "$a ${$a}"; echo "$a $hello"; Kết quả là : hello world
Chú ý: Có thể gặp phải trường hợp không rõ ràng khi sử dụng cách này với mảng. VD: $$a[1] sẽ hiểu là dùng $a[1] như 1 biến hay dùng $$a như 1 biến với [1] là chỉ số?. Để tránh trường hợp này, cần có sự phân biệt rõ bằng dấu {}.
VD: ${$a[1]}hoặc ${$a}[1].
Các giá trị bên ngoài phạm vi PHP.
HTML Form: Khi 1 form gắn với 1 file php qua phương thức POST. VD:
<form action="foo.php3" method="post"> Name: <input type="text" name="name"><br> <input type="submit">
</form>
PHP sẽ tạo 1 biến $name bao gồm mọi giá trị trong trường Name cuả Form.
PHP có thể hiểu được một mảng một chiều gồm các giá trị trong 1 Form. Vì vậy, ta có thể nhóm những giá trị liên quan lại với nhau hoặc sử dụng đặc tính này để nhận các giá trị từ 1 đầu vào tuỳ chọn.
Khi tính chất track_vars được đặt trong cấu hình hoặc có chỉ dẫn <? php_track_vars?>, các giá trị được submit được lấy ra qua phương thức GET và POST có thể lấy từ 2 mảng toàn cục $HTTP_POST_VARS và $HTTP_GET_VARS.
IMAGE SUBMIT:
Khi dùng 1 image để thực hiện submit, có thể dùng tag như sau: <INPUT TYPE=IMAGE SRC="IMAGE.GIF" NAME="SUB">
Khi người dùng click chuột trên ảnh, form tương ứng sẽ được gởi tới server kèm theo 2 giá trị thêm vào: sub_x và sub_y. Những biến này sẽ lưu giữ tọa độ mà người dùng đã click chuột trên ảnh. Người lập trình có kinh nghiệm sẽ thấy rằng trên thực tế, trình duyệt gửi các giá trị có chu kỳ thời gian nhưng PHP đã tạo cảm giác gần như việc gửi các giá trị đó liên tục.
HTTP COOKIES
PHP hỗ trợ HTTP Cookies theo định dạng của Netscape. Cookies file lưu trữ thông tin của các trình duyệt từ xa và qua đó có thể theo do?i hay nhận biết
người sử dụng. Có thể dùng Cookies bằng hàm SetCookie(). Hàm này cần được gọi trước khi thông tin được gửi tới trình duyệt. Bất kỳ cookie nào gửi tới người dùng từ máy khách (client) sẽ tự động chuyển thành dữ liệu của phương thức GET và POST.
Nếu muốn có nhiều giá trị trong 1 cookie, chỉ cần thêm vào dấu [ ] với tên cookie.
VD:
SetCookie ("MyCookie[]", "Testing", time()+3600);
Chú ý rằng cookie sẽ thay thế cho cookie cùng tên, trừ trường hợp khác đường dẫn hoặc miền.
BIẾN MÔI TRƯỜNG:
PHP tự động tạo biến cho các biến môi trường như 1 biến bịnh thường của PHP.
VD :
echo $HOME; /* Shows the HOME environment variable, if set. */
Vì thông tin tới qua các phương thức GET và POST, Cookie cũng tự động tạo các biến PHP, thỉnh thoảng ta nên đọc 1 biến từ môi trường để chắc chắn rằng mình có đúng version. Hàm GETENV() và PUTENV() giúp ta đọc và ghi với các biến môi trường.
DẤU CHẤM TRONG TÊN BIẾN
Bình thường, PHP không thay đổi tên biến khi biến đó được truyền vào đoạn Script. Tuy nhiên, nên chú ý rằng dấu chấm (.) không phải là một ký hiệu
hợp lệ trong tên biến đối với PHP. VÌ vậy, PHP sẽ tự động thay thế các dấu chấm bằng dấu gạch dưới.(_)
e. Hằng Số:
PHP định nghĩa sẳn một vài hằng số:
_FILE_ : Tên của script file đang được thực hiện.
_LINE_ : Số dòng của mã script đang được thực hiện trong script file hiện tại. _PHP_VERSION_ : version của PHP
TRUE FALSE
E_ERROR : Báo hiệu có lỗi.
E_PARSE : Báo lỗi sai khi biên dịch
E_NOTICE : Một vài sự kiện có thể là lỗi hoặc không. E_ALL :
Có thể định nghĩa một hằng số bằng hàm define() VD :
<?php
define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." ?>
f. Biểu Thức
Biểu thức là một phần quan trọng trong PHP. Phần lớn mọi thứ ta viết đều được coi như là một biểu thức. Điều này có nghĩa là mọi thứ đều có một giá trị.
Một dạng cơ bản nhất của biểu thức là bao gồm các biến và hằng số.
PHP hổ trợ 3 kiều giá trị cơ bản nhất: Số nguyên, số thực, và xâu. Ngoài ra còn có mảng và đối tượng. Mỗi kiểu giá trị này đều có thẻ gán cho các biến hay làm giá trị trả ra khỏi các hàm.
Ta có thể thao tác với các biến trong PHP giống như trong C. VD : $b = $a = 5; $c = $a++; $e = $d = ++$b; $f = double($d++); $g = double(++$e); $h = $g += 10; g. Các Cấu Trúc Lệnh If ....else....else if:
if (điều kiện) { các lệnh thực thi; } elseif ( điều kiện) { các lệnh thực thi;} else {các lệnh thực thi;}
Vòng lặp:
while ( DK) { ...} do { ...} white ( DK );
for (bieuthuc1; bieuthuc2; bieu thuc3) {...} PHP 4 only :
foreach(array_expression as $key => $value) statement Break và continue:
Break: Thoát khỏi vòng lặp hiện thời
Continue: Bỏ qua vòng lặp hiện tại, tiếp tục vòng tiếp theo. Switch
switch (tên biến) {
case trường hợp 1: ... break; case trường hợp 2: ... break; case trường hợp 3: ... break; default :
}
Những điều cần nhớ:
Các cấu trúc điều khiển chi phối tốc độ của chương trình, cho phép chia nhỏ các thành phần khác nhau của một ngôn ngữ lập trình, phụ thuộc vào đầu vào và có thể dễ dàng thực hiện các thao tác.
Có hai loại cấu trúc điều khiển trong PHP: Ngôn ngữ điều kiện và Điều khiển theo một vòng khép kin.
Hai loại cấu trúc trên chỉ có các lệnh không dùng dấu ngoặc, tuy nhiên các nhà lập trình thường sử dụng chúng để tạo mã dễ hiêủ hơn. Các lệnh này thường được ứng dụng với cùng một lý do.
Break: Có thể được dùng để kết thúc lệnh hiện thời. Nó cũng có thể được sử dụng để xoá bỏ For Loops và While Loops, Exit, xoá bỏ toàn bộ nhiệm vụ của ngôn ngữ lập trình. Break còn được dùng ở bất kỳ đâu trong ngôn ngữ lập trình
Dùng giống như C, ngoại trừ việc không cần phải khai báo kiểu cho tham số của hàm:
Tham trị:
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1]; }
Tham biến
function add_some_extra(&$string) { $string .= 'and something extra.'; }
Tham số có giá trị mặc định:
function makecoffee ($type = "cappucino") { return "Making a cup of $type.\n";
}
Chú ý: Khi sử dụng hàm có đối số có giá trị mặc định, các biến này sẽ phải nằm về phía phải nhất trong danh sách các đối số.
VD : Sai
function makeyogurt ($type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n";
} Đúng:
function makeyogurt ($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n";
}
Gía trị trả lại của hàm:
Có thể là bất kỳ giá trị nào. Tuy vậy, không thể trả lại nhiều giá trị riêng lẻ nhưng có thể trả lại một mảng các giá trị.
VD:
function small_numbers() { return array (0, 1, 2);
}
Để trả lại một tham trỏ, ta cần có dấu & ở cả khai báo của hàm cũng như ở giá trị trả lại. VD : function &returns_reference() { return &$someref; } $newref = &returns_reference(); Hàm biến:
PHP cho phép sử dụng hàm giá trị. Nghĩa là khi một biến được gọi có kèm theo dấu ngoặc đơn, PHP sẽ tìm hàm có cùng tên với giá trị biến đó và thực hiện.
VD: <?php
function foo() {
echo "In foo()<br>\n"; }
function bar( $arg = '' ) {
echo "In bar(); argument was '$arg'.<br>\n"; } $func = 'foo'; $func(); $func = 'bar'; $func( 'test' ); ?> i. Các toán tử: PHP có các toán tử cho các phép số học: + - * / % Các toán tử logic: And, Or, Xor ! && ||
Toán tử thao tác với bit: & | ^ ~ << >>
Toán tử so sánh: = =,!=, <, >, <=, >=,= = = = (bằng và cùng kiểu-Chỉ có trong PHP4), != = (khác hoặc khác kiểu-Chỉ có trong PHP 4).
Toán tử điều khiển lỗi: @ - Khi đứng trước 1 biểu thức thị các lỗi của biểu thức sẽ bị bỏ qua và lưu trong $php_errormsg.
VD:
<?php
/* Intentional SQL error (extra quote): */
$res = @mysql_query ("select name, code from 'namelist") or die ("Query failed: error was '$php_errormsg'");
?>
Toán tử thực thi:` `- PHP sẽ thực hiện nội dung nằm trong 2 dấu ` như 1 lệnh shell. Trả ra giá trị là kết qua thực hiện lệnh.
VD :
$output = `ls -al`; //Liệt kê các file bằng lệnh Linux echo "<pre>$output</pre>";
j. Lớp và đối tượng:
Class: Là tập hợp các biến và hàm làm việc với các biến này. Một lớp có định dạng như sau:
<?php class Cart {
var $items; // Items in our shopping cart // Add $num articles of $artnr to the cart function add_item ($artnr, $num) { $this->items[$artnr] += $num; }
// Take $num articles of $artnr out of the cart function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num;
return true; } else { return false; } } } ?>
Lớp Cart ơ' đây là một kiểu dữ liệu, vì vậy có thể tạo một biến có kiểu này với toán tử new:
VD:
$cart = new Cart;
$cart->add_item("10", 1);
Lớp có thể được mở rộng bằng những lớp khác. Lớp mới thu được có tất cả những biến vàhàm của các lớp thành phần. Thực hiện việc thừa kế này bằng từ khoá "extends" . Chú ý: Kế thừa nhiều lớp một lúc không được chấp nhận. VD :
class Named_Cart extends Cart { var $owner;
function set_owner ($name) { $ this->owner = $name;
} }
Các hàm khởi tạo của lớp được gọi tự động khi ta gọi toán từ new
Tuy nhiên, các hàm khởi tạo của lớp cha sẽ không được gọi khi hàm khởi tạo của lớp con được gọi. Hàm khởi tạo có thể có đối số hoặc không.
k. Tham chiếu:
Tham chiếu trong PHP có nghĩa là lấy cùng một giá trị bằng nhiều tên biến khác nhau. Khác với con trỏ C, tham chiếu là một bảng các bí danh. Chú ý: Trong PHP, tên biến và nội dung của biến là khác nhau. VÌ vậy, cùng 1 nội dung có thể có nhiều tên khác nhau.
Tham chiếu PHP cho phép ta tạo 2 biến có cùng nội dung. VD :
$a = & $b; -- > $a, $btrỏ tới cùng một giá tri
Tham chiếu truyền giá trị bằng tham chiếu. Thực hiện việc này bằng cách tạo một hàm cục bộ và truyền giá trị được tham chiếu.