Truyền tham số (3)
Bạn có thể truyền tham số với số lượng không xác định. Khi đó sẽ sử dụng các hàm sau
func_num_args(): Số lượng tham số
func_get_args(): Lấy danh sách các tham số
function mwrite() {
$arg = func_get_args();
foreach($arg as $value) echo "$value\n";
}
mwrite("Khoa CNTT", "Truong DHXD", "Lop 46PM1");
?>
Giá trị trả về
Để trả về giá trị của hàm, sử dụng lệnh return. Có thể sử dụng bất cứ kiểu nào trong giá trị trả về của hàm (kể cả mảng và đối tượng)
function square ($num) {
return $num * $num;
}
echo square (4); // outputs '16'.
function small_numbers() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
function &returns_reference() {
return $someref;
}
$newref =& returns_reference();
?>
Biến hàm
Bạn có thể sử dụng các biến hàm (tức là bạn có thể gọi hàm dưới dạng ten_bien() ).
Biến hàm thường được sử dụng cho các hàm callback
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()
?>
164 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 429 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng PHP (Hypertext Preprocessing) - Nguyễn Phú Quảng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
4;$xe->BaoNhieuBanh();?>II.1.3. HằngĐịnh nghĩa hằng bằng cách sử dụng hàm define()Phạm vi của hằng là toàn cục (global)Chỉ có các dạng dữ liệu đơn giản (boolean, interger, float, string)Nếu tên hằng chưa được định nghĩa, PHP giả thiết rằng bạn đang sử dụng 1 hằng chứa giá trị là 1 string (chính là tên của hằng đó)Để xác định một hằng đã được định nghĩa hay chưa, bạn có thể sử dụng hàm definedII.1.3. Hằng (2)Các hằng được định nghĩa trước (các hằng này thường được sử dụng để phục vụ quá trình debugTên hằngMô tả__LINE__Thứ tự dòng hiện tại trong file__FILE__Đường dẫn đầy đủ của file hiện tại__FUNCTION__Tên hàm hiện tại__CLASS__Tên lớp hiện tại__METHOD__Tên phương thức hiện tại của lớpII.2. Toán tử và biểu thứcII.2.1. Mức độ ưu tiên các toán tửII.2.2. Toán tử số họcII.2.3. Toán tử gánII.2.4. Các toán tử trên bitII.2.5. Toán tử so sánhII.2.6. Toán tử điều khiển lỗiII.2.7. Toán tử thực thiII.2.8. Toán tử tăng, giảmII.2.9. Các toán tử logicII.2.10. Toán tử trên stringII.2.11. Toán tử trên mảngII.2.1. Mức độ ưu tiên các toán tửAssociativityOperatorsleft,leftorleftxorleftandrightprintright= += -= *= /= .= %= &= |= ^= >= left? :left||left&&left|left^left&non-associative== != === !==non-associative >=left>left+ - .left* / %right! ~ ++ -- (int) (float) (string) (array) (object) @right[non-associativenewII.2.2. Toán tử số họcExampleNameResult$a + $bAdditionSum of $a and $b.$a - $bSubtractionDifference of $a and $b.$a * $bMultiplicationProduct of $a and $b.$a / $bDivisionQuotient of $a and $b.$a % $bModulusRemainder of $a divided by $b.II.2.3. Toán tử gánToán tử gán (=) cho phép bạn gán một biểu thức (vế phải) cho 1 biến (vế trái)Toán tử gán trả về giá trị của biểu thức vế phải, do đó có thể dùng nhiều phép gán liên tiếp nhauNgoài ra, còn có các phép toán gọi là phép toán kết hợp cho hầu hết các toán tử số học để thay đổi giá trị 1 biến theo phép toán số học đó (+=, -=, *=, /=, .= ...)II.2.4. Các toán tử trên bitExampleNameResult$a & $bAndBits that are set in both $a and $b are set.$a | $bOrBits that are set in either $a or $b are set.$a ^ $bXorBits that are set in $a or $b but not both are set. ~ $aNotBits that are set in $a are not set, and vice versa. $a II.2.5. Toán tử so sánhExampleNameResult$a == $bEqualTRUE if $a is equal to $b.$a === $bIdenticalTRUE if $a is equal to $b, and they are of the same type. (PHP 4 only) $a != $bNot equalTRUE if $a is not equal to $b.$a $bNot equalTRUE if $a is not equal to $b.$a !== $bNot identicalTRUE if $a is not equal to $b, or they are not of the same type. (PHP 4 only) $a $bGreater thanTRUE if $a is strictly greater than $b.$a = $bGreater than or equal to TRUE if $a is greater than or equal to $b.II.2.6. Toán tử điều khiển lỗiToán tử điều khiển lỗi (@) dùng để đặt trước các hàm, biểu thức. Khi đó tất cả các thông báo lỗi trong hàm, biểu thức đó bị bỏ qua II.2.7. Toán tử thực thiToán tử thực thi (``) cho phép bạn gọi các lệnh trên console, (các thông tin tin này có thể viết ra output hoặc gán vào các biến)II.2.8. Toán tử tăng, giảm\n";echo "Should be 6: " . $a . "\n";$a = 5;echo "Should be 6: " . ++$a . "\n";echo "Should be 6: " . $a . "\n";$a = 5;echo "Should be 5: " . $a-- . "\n";echo "Should be 4: " . $a . "\n";$a = 5;echo "Should be 4: " . --$a . "\n";echo "Should be 4: " . $a . "\n";?>II.2.9. Các toán tử logicExampleNameResult$a and $bAndTRUE if both $a and $b are TRUE.$a or $bOrTRUE if either $a or $b is TRUE.$a xor $bXorTRUE if either $a or $b is TRUE, but not both.! $aNotTRUE if $a is not TRUE.$a && $bAndTRUE if both $a and $b are TRUE.$a || $bOrTRUE if either $a or $b is TRUE.II.2.10. Toán tử trên stringCó 2 toán tử trên string ( . và .=)II.2.11. Toán tử trên mảngĐối với mảng, chỉ có toán tử +, toán tử này nối 2 mảng với nhau (các phần trùng khóa được lấy ở toán hạng trái) "apple", "b" => "banana"); $b = array("a" =>"pear", "b" => "strawberry", "c" => "cherry"); $c = $a + $b; var_dump($c);?>II.3. Các cấu trúc điều khiểnII.3.1. Cấu trúc if, else, elseif, endifII.3.2. Cấu trúc while / do...whileII.3.3. Cấu trúc for / for...eachII.3.4. Sử dụng break, continue trong các vòng lặpII.3.5. Cấu trúc switchII.3.1. Cấu trúc if, else, elseif, endif $b) { echo "a is bigger than b"; $b = $a;}if ($a > $b) { echo "a is bigger than b";} else { echo "a is NOT bigger than b";}if ($a > $b) { echo "a is bigger than b";} elseif ($a == $b) { echo "a is equal to b";} else { echo "a is smaller than b";}?>A is equal to 5II.3.2. Cấu trúc while / do...while 0);?>II.3.3. Cấu trúc for / for...each 10) break; print "$i\n";}echo "--------------------\n";$i = 1;for (;;) { if ($i > 10)break; print "$i\n"; $i++;}echo "--------------------\n";for ($i = 1; $i II.3.3. Cấu trúc for / for...each (2)foreach (array_expression as $value) statementforeach (array_expression as $key => $value) statement\n"; } foreach ($arr as $value) { echo "Value: $value\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value\n"; } foreach (array(1, 2, 3, 4, 5) as $v) { print "$v\n"; }?>II.3.4. Sử dụng break, continue trong các vòng lặp\n";}while (list ($key, $value) = each ($arr)) { if (!($key % 2)) // Bỏ qua số lẻ continue; do_something_odd ($value);}?>II.3.4. Sử dụng break, continue trong các vòng lặp (2)$i = 0;while ($i++ \n"; while (1) { echo " Middle\n"; while (1) { echo " Inner\n"; continue 3; } echo "This never gets output.\n"; } echo "Neither does this.\n";}?>II.3.5. Cấu trúc switchII.4. HàmII.4.1. Hàm tự định nghĩa (user-defined)II.4.2. Truyền tham sốII.4.3. Giá trị trả vềII.4.4. Biến hàmII.4.1. Hàm tự định nghĩa (user-defined)II.4.2. Truyền tham sốPHP hỗ trợ truyền tham số vào hàm, truyền tham số dưới dạng tham chiếu (reference), truyền tham số với giá trị mặc địnhII.4.2. Truyền tham số (2)function makecoffee ($type = "cappuccino") { return "Making a cup of $type.\n";}echo makecoffee ();echo makecoffee ("espresso");function makeyogurt ($type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n";}// won't work as expectedecho makeyogurt ("raspberry");function makeyogurt ($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n";}// works as expected echo makeyogurt ("raspberry");II.4.2. Truyền tham số (3)Bạn có thể truyền tham số với số lượng không xác định. Khi đó sẽ sử dụng các hàm saufunc_num_args(): Số lượng tham sốfunc_get_args(): Lấy danh sách các tham sốII.4.3. Giá trị trả vềĐể trả về giá trị của hàm, sử dụng lệnh return. Có thể sử dụng bất cứ kiểu nào trong giá trị trả về của hàm (kể cả mảng và đối tượng)II.4.4. Biến hàmBạn có thể sử dụng các biến hàm (tức là bạn có thể gọi hàm dưới dạng ten_bien() ).Biến hàm thường được sử dụng cho các hàm callback\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()?>II.4.4. Biến hàm (2)$name(); // This calls the Bar() method } function Bar() { echo "This is Bar"; }}$foo = new Foo();$funcname = "Var";$foo->$funcname(); // This calls $foo->Var()?>II.5. Lớp & đối tượngII.5.1. Serializing đối tượng – đối tượng trong sessionII.5.2. Tham chiếu bên trong constructorII.5.3. So sánh đối tượng trong PHP4II.5.4. So sánh đối tượng trong PHP5II.5.1. Serializing đối tượng – đối tượng trong sessionHàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu thông tin của đối tượngHàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize()a = 10;$ob1->b = 100;$ob1->c = "Nguyen Phu Quang";$luu = serialize($ob1);echo "$luu\n";$ob2 = unserialize($luu);var_dump($ob2);?>II.5.2. Tham chiếu bên trong constructorsetName($name); } function setName($name) { $this->m_name = $name; } function echoName() { echo "$this->m_name\n"; }};$a = new AClass("a");$b =& new AClass("b");$a->setName("quang1");$global_ref[0]->echoName();$b->setName("quang2");$global_ref[1]->echoName();?>II.5.3. So sánh đối tượng trong PHP4m_flag = true; }};$a = new AClass();$b = new BClass();$a->m_flag = true;$b->turnOn();$c = new BClass();$c->turnOn();var_dump($b==$c);var_dump($a==$b);?>Trong PHP4, phép so sánh các đối tượng thực hiện theo quy tắc đơn giản sau: Hai đối tượng là bằng nhau nếu chúng có các thuộc tính bằng nhau và cùng thuộc 1 lớp. Quy tắc so sánh này cùng được áp dụng với phép ===II.5.3. So sánh đối tượng trong PHP4set[$key] = $value; } function removeFlag($key) { unset($this->set[$key]); } }; $a = $b = new AClass(); $a->addFlag("quang", 1); $a->addFlag("quang2", 2); $b->addFlag("quang", 1); $b->addFlag("quang2", 2); var_dump($a==$b); $b->removeFlag("quang"); var_dump($a==$b);?>II.5.4. So sánh đối tượng trong PHP5So sánh đối tượng trong PHP5 có một số thay đổi so với PHP4Đối với phép so sánh ==, hai đối tượng bằng nhau nếu có chung các thuộc tính và cùng thuộc 1 lớpĐối với phép so sánh ===, hai đối tượng được gọi là bằng nhau nếu chúng cùng tham chiếu đến 1 phiên bản của 1 lớpII.6. Tham chiếu (reference)II.6.1. Các trường hợp sử dụng tham chiếuII.6.2. Các trường hợp ko sử dụng tham chiếuII.6.3. Truyền tham chiếuII.6.4. Trả về tham chiếuII.6.5. Unset tham chiếuII.6.1. Các trường hợp sử dụng tham chiếuTham chiếu cho phép bạn sử dụng 1 biến với nhiều tên khác nhauĐối với đối tượng, nên sử dụng phép gán tham chiếu khi dùng toán tử new để tránh phép gán tạo ra thêm 1 phiên bản của đối tượngĐể thay đổi giá trị của tham số truyền vào trong hàm, bạn có thể sử dụng tham chiếuII.6.2. Các trường hợp ko sử dụng tham chiếuTham chiếu gần giống con trỏ nhưng bản chất không phải là con trỏTrong trường hợp tại ví dụ dưới đây, $var trong hàm foo đầu tiên được tham chiếu đến biến $var (global). Tuy nhiên sau đó $var lại được tham chiếu điến biến $quang (global)II.6.3. Truyền tham chiếuBạn có thể truyền các dạng tham chiếu sau:Biến foo($a)Lệnh new foo(new AClass());Tham chiếu trả về từ hàmII.6.4. Trả về tham chiếuHàm có thể trả về tham chiếu, khi đó bạn đặt toán tử tham chiếu đứng trước tên hàmNếu hàm trả về tham chiếu, để nhân được tham chiếu bạn phải dùng toán tử gán với tham chiếu đến hàm (xem ví dụ)II.6.5. Unset tham chiếuBạn có thể sử dụng lệnh unset() để loại bỏ một biến khỏi bộ nhớNếu unset được sử dụng với 1 biến tham chiếu, PHP sẽ kiểm tra xem còn biến nào cùng tham chiếu đến vùng nhớ hay không rồi mới loại bỏ biến khỏi bộ nhớ III. Làm việc với FormIII.1. Các biến SuperGlobalIII.2. Biến $_SERVERIII.3. Lấy thông tin từ formIII.4. Kết hợp mã HTML và PHP trong 1 trangIII.5. Sử dụng Hidden field để lưu trạng tháiIII.6. RedirectIII.7. Form Upload fileIII.1. Các biến SuperGlobalCác biến global là các biến được khai báo ở mức ngoài cùng của PHP được sử dụng chung cho mọi moduleCác biến SuperGlobal là các biến (mảng) được PHP tạo ra để lưu các thông tin cần thiếtArrayDescription$_COOKIEContains keys and values set as browser cookies$_ENVContains keys and values set by the script's shell context$_FILESContains information about uploaded files$_GETContains keys and values submitted to the script using the HTTP get method$_POSTContains keys and values submitted to the script using the HTTP post method$_REQUESTA combined array containing values from the $_GET, $_POST, and $_COOKIES superglobal arrays$_SERVERVariables made available by the server$GLOBALSContains all global variables associated with the current scriptIII.2. Biến $_SERVERVariableContainsExample$_SERVER['PHP_SELF']The current script. Suitable for use in links and form element action arguments./phpbook/source/listing10.1.php$_SERVER['HTTP_USER_AGENT']The name and version of the client.Mozilla/4.6 –(X11; I;Linux2.2. 6-15apmac ppc)$_SERVER['REMOTE_ADDR']The IP address of the client.158.152.55.35$_SERVER['REQUEST_METHOD']Whether the request was GET or POST.POST$_SERVER['QUERY_STRING']For GET requests, the encoded data sent appended to the URL.name=matt&address=unknown$_SERVER['REQUEST_URL']The full address of the request, including query string./phpbook/source/listing10.1.php? name=matt$_SERVER['HTTP_REFERER']The address of the page from which the request was made. Biến $_SERVER (2)Đoạn lệnh sau liệt kê tất cả các thông tin của biến $_SERVER$value) { echo "[$key]=$value\n";}?>III.3. Lấy thông tin từ formIII.3.1. Lấy thông tin từ form bằng các mảng superglobalIII.3.2. Import thông tin của form vào các biến globalIII.3.3. Lấy thông tin của form bằng mảng do người dùng định nghĩaIII.3.1. Lấy thông tin từ form bằng các mảng superglobalDữ liệu từ form được submit lên server thông qua các phương thức: get, postĐể lấy được thông tin từ form, bạn có thể sử dụng các mảng superglobal tương ứng $_POST[tên_control], $_GET[tên_control], $_REQUEST[tên_control] (REQUEST có thể sử dụng cho cả POST và GET)III.3.2. Import thông tin của form vào các biến globalĐể thuận tiện cho người lập trình, PHP cung cấp hàm import_request_variables() cho phép đưa các tham số GET, POST và COOKIE vào thành các biến globalCú phápbool import_request_variables(string types, [string prefix])types: Chỉ ra loại thông tin nào được import, có thể kết hợp giữa các giá trị g, p, c (get, post, cookie)prefix: tiền tố cho tên biếnIII.3.3. Lấy thông tin của form bằng mảng do người dùng định nghĩaNhững cách lấy thông tin từ form đã nêu trên cho phép chúng ta làm việc tốt với các control đơn (có 1 giá trị)Đối với các control có nhiều giá trị như select hay checkbox, nảy sinh vấn đề là làm sao nhận được tất cả các control được lựa chọnĐể giải quyết vấn đề này, đặt tên các control với kết thúc là dấu ngoặc vuông [], khi đó dữ liệu truyền từ form đến server sẽ là mảngIII.3.3. Lấy thông tin của form bằng mảng do người dùng định nghĩaSony EricsonMotorolaSamsungHang tauIII.4. Kết hợp mã HTML và PHP trong 1 trangĐối với các trang PHP nhỏ, bạn thường muốn kết hợp form gửi thông tin với các đoạn script PHP xử lý thông tin. Điều này có thể dễ dàng thực hiện bằng cách để các kết hợp các cấu trúc điều khiển rẽ nhánh với các đoạn mã HTML.Để đặt đoạn mã HTML vào trong cấu trúc rẽ nhánh, sử dụng kết hợp các khối lệnh PHP (xem ví dụ)III.4. Kết hợp mã HTML và PHP trong 1 trang (2) Cam on ban da su dung san pham Motorola Sony Ericson Motorola Samsung Hang tau III.5. Sử dụng Hidden field để lưu trạng tháiĐể lưu thông tin chung của các form giữa các lần submit (ví dụ: Số lần submit), cách đơn giản nhất là sử dụng trường ẩn (hidden field) trong form3) echo "Submit gi ma nhieu the?";echo "$g_nSubmit";?>">III.6. RedirectRõ ràng là việc hardcode HTML cùng với sử dụng nhiều khối PHP xen lẫn HTML là không tốt. Một cách đơn giản và hiệu quả hơn là sử dụng Redirect để dẫn hướng người dùng đến các trang thích hợp (ví dụ: Trang đăng nhập nếu người dùng chưa đăng nhập, trang chúc mừng nếu người dùng đăng nhập thành công)Để làm được việc này, trước hết ta tìm hiểu cơ chế làm việc giữa PHP script và client. Đầu tiên, để giao tiếp với client, PHP tự động gửi các thông tin header cho client. Tuy nhiên, bạn vẫn có thể tự gửi header.Để dẫn hướng client đến trang khác, bạn chỉ cần đơn giản đổi header bằng hàm header(). Để sử dụng hàm header() bạn phải đảm bảo rằng cho có dữ liệu nào đã được gửi cho client (sử dụng hàm header_sent() để kiểm tra)III.6. Redirect (2)5) { header("Location:ham.html"); exit;} elseif ($g_nSubmit>3) echo "Submit gi ma nhieu the?";echo "$g_nSubmit";?>">III.7. Form Upload fileNgười dùng có thể gửi các file (upload) lên server là một chức năng không thể thiếu đối với các ứng dụng Web-basedĐể form có thể upload file, bạn phải xác định form enctype: ENCTYPE="multipart/form-data”Với PHP, bạn có thể xác định kích thước lớn nhất của file upload bằng cách đặt thêm 1 hidden field có tên MAX_FILE_SIZE trước control file" method="post">III.7. Form Upload file (2)Mảng $_FILEElementContainsExample$ FILES['fupload']['name']Name of uploaded filetest.gif$_FILES['fupload']['tmp_name']Path to temporary file/tmp/phprDfZvN$_FILES['fupload']['size']Size (in bytes) of uploaded file6835$_FILES['fupload']['error']An error code corresponding to a PHP constantUPLOAD_ERR_FORM_SIZE$_FILES['fupload']['type']MIME type of uploaded file (where given by client)image/gifConstant NameValueExplanationUPLOAD_ERR_OK0No problemUPLOAD_ERR_INI_SIZE1File size exceeds php.ini limit set in upload_max_filesizeUPLOAD_ERR_FORM_SIZE2File size exceeds limit set in hidden element named MAX_FILE_SIZEUPLOAD_ERR_PARTIAL3File only partially uploadedUPLOAD_ERR_NO_FILE4File was not uploadedIII.7. Form Upload file (3)IV. Làm việc với fileIV.1. Sử dụng include()IV.2. Sử dụng include_once() và include_path cho các dự án lớnIV.3. Kiểm tra fileIV.4. Đọc, ghi fileIV.5. Làm việc với thư mụcIV.1. Sử dụng include()Lệnh include() cho phép bạn phối hợp giữa các file trong một PHP project, ko giống như cú pháp #include của ngôn ngữ C, lệnh này không chèn mã lệnh vào file mà thực thi file php giống như cú pháp gọi hàminclude() sử dụng để chia sẻ các hàm dùng chung, các đoạn mã chung trong một project có nhiều fileNếu không tìm thấy file, include() thông báo warning nhưng không dừng chương trìnhPHP cung cấp 1 lệnh tương tự include() là require(), lệnh này có sự khác biệt là sẽ dừng ngay chương trình khi không tìm thấy fileIV.1. Sử dụng include() (2)IV.1. Sử dụng include() (3)Vì include() thực hiện lời gọi đến file php, do đó bạn có thể trả về giá trị từ file PHP được includeIV.1. Sử dụng include() (4)Bạn có thể đặt lệnh include bên trong 1 cấu trúc điều kiện hoặc cấu trúc lặp, khi đó tùy theo điều kiện của cấu trúc mà include() có được thực hiện hay không, 1 hay nhiều lầnIV.2. Sử dụng include_once() và include_path cho các dự án lớninclude_once() giống như include(), tuy nhiên có điểm khác biệt là chỉ include 1 lần, lần sau nếu gặp lại file này thì ko include nữainclude_once() sử dụng cho các hàm thư viện dùng chung để tránh trường hợp khi nhiều file cùng include đến 1 file, sau đó các file này lại include lẫn nhau (so sánh với #ifdefine trong file header của ngôn ngữ C)include_once() phân biệt chữ hoa, chữ thườngIV.2. Sử dụng include_once() và include_path cho các dự án lớn (2)Trong quá trình làm việc, bạn hẳn có nhiều hàm được dùng chung giữa nhiều file trong 1 project, giữa nhiều project. Để sử dụng các hàm này, bạn có thể áp dụng các cách sau:include file theo đường dẫn tuyệt đối: Cách này dở vì khi cài đặt trên máy khác sẽ không tìm thấy file được includeinclude file theo đường dẫn tương đối: Cách này tốt hơn, nhưng mỗi khi đổi vị trí của file được include thì phải sửa lại tại tất cả các file thực hiện lời gọi includeCách tốt nhất là sử dụng include_path (thiết lập trong file PHP.INI) đối với những file thư viện dùng chung được sử dụng nhiều (giống như đối với ngôn ngữ C)IV.2. Sử dụng include_once() và include_path cho các dự án lớn (3)Để thiết lập include_path, bạn có những cách sau:thay đổi include_path trong PHP.INIdùng lệnh set_include_path()dùng lệnh ini_set()IV.3. Kiểm tra filefile_exist(), is_file(), is_dir(), is_readable(), is_writeable(), is_executable(), filesize(), fileatime()"; return; } print "$file is ".(is_file( $file )?"":"not ")."a file\n"; print "$file is ".(is_dir( $file )?"":"not ")."a directory\n"; print "$file is ".(is_readable( $file )?"":"not ")."readable\n"; print "$file is ".(is_writable( $file )?"":"not ")."writable\n"; print "$file is ".( filesize($file))." bytes\n"; print "$file was accessed on " .date( "D d M Y g:i A", fileatime( $file ) )."\n"; print "$file was modified on " .date( "D d M Y g:i A", filemtime( $file ) )."\n"; print "$file was changed on" .date( "D d M Y g:i A", filectime( $file ) )."\n";}outputFileTestInfo("c:\\windows\\system32\\cmd.exe");?>IV.4. Đọc, ghi filefopen($filename, $mode);fwrite($handle, $string);fread($handle, $length);fgets($handle);sprintf($format);fscanf($handle, $format);fseek($handle, $offset);fclose($handle);file_get_contents($filename);IV.4. Đọc, ghi file (2)IV.4. Đọc, ghi file (3)IV.4. Đọc, ghi file (4)a = 10;$ob1->b = 100.023;$ob1->c = "Test String";var_dump($ob1);$f = fopen("test.txt", "wb");fwrite($f, serialize($ob1));fclose($f);$f = fopen("test.txt", "rb");$ob2 = unserialize(fgets($f));fclose($f);var_dump($ob2);?>IV.5. Làm việc với thư mụcmkdir(), rmdir(), opendir(), readdir(), closedir()V. PHP & CSDLV.1. Sử dụng PHP để kết nối với CSDLV.2. PEAR DBV.3. Các chức năng nâng cao với PEAR DBV.1. Sử dụng PHP để kết nối với CSDLCó 2 cách kết nối PHP với CSDLSử dụng các hàm riêng cho từng loại CSDLƯu điểm: Tốc độ cao do được thiết kế cho từng CSDL cụ thể. Tận dụng được ưu điểm của từng loại CSDLNhược điểm: Không có tính khả chuyển giữa các CSDLSử dụng các hàm độc lập CSDL (thư viện PEAR DB)Ưu điểm: Có thể sử dụng trên nhiều CSDL khác nhauNhược điểm: Chậm hơn phương pháp trên, không tận dụng được ưu điểm của từng CSDL. V.1. Sử dụng PHP để kết nối với CSDL (2)Cài đặt thư viện PEARYêu cầu: PHP phiên bản 5.0Cài đặt PHPChạy go-pear.batTheo các hướng dẫn trong chương trình (các tham số chỉ cần đặt mặc định)Nếu không cài đặt PEAR, mà copy từ máy khác, phải thêm vào C:/Windows/PHP.INI 2 dòng như ở dướiCấu hình Zend Studio để làm việc với PEAR DBThêm vào file $Zend_dir/bin/php5/php.ini 2 dònginclude_path=".;C:/php/pear"extension_dir="c:/php/ext"Copy file libMySQL.dll vào $Windows/$System (nếu bạn sử dụng IIS)Các bước cài đặt kiểu mì ăn liềnCài IIS, cài Mysql 5.0, cài PHPCopy $\Mysql\bin\libMysql.dll đến c:\windows\system32Copy PHP.rar đè lên thư mục c:/PHPSửa nội dung c:\windows\system32\PHP.INI, thêm vào các dòng sau (để ở cuối file)include_path=".;C:/php/pear"extension_dir=" c:/php/ext"extension=php_mysql.dllSau đó, có thể chạy được trên local host (trên Zend thì phải config thêm, tốt nhất là đừng config)V.2. PEAR DBgetMessage()); $table = $db->query("SELECT * FROM SV"); if (DB::isError($table)) die($table->getMessage()); echo ""; while ($row = $table->fetchRow()) { echo " $row[0] $row[1] $row[2] $row[3] "; } echo "";?>V.2. PEAR DB (2)V.2.1. Data source nameV.2.2. Kết nối với cơ sở dữ liệuV.2.3. Kiểm tra lỗiV.2.4. Thực thi queryV.2.5. Lấy kết quả từ queryV.2.6. Giải phóng bộ nhớV.2.1. Data source namedsn=Data Source Nametype://username:password@protocol+hostspec/databaseVí dụ:mysql:///webdb mysql://localhost/webdb mysql://bondview@localhost/webdb mysql://bondview@tcp+localhost/webdb mysql://bondview:007@localhost/webdb TypeDatabaseMysqlMySQLPgsqlPostgreSQLIbaseInterBaseMsqlMini SQLMssqlMicrosoft SQL Serveroci8Oracle 7/8/8iOdbcODBCSybaseSyBaseIfxInformixFbsqlFrontBaseV.2.2. Kết nối với cơ sở dữ liệuKhi đã có DSN, bạn có thể kết nối bằng hàm DB::connect với cú pháp sau:$db = DB::connect(DSN [, options ]);options có thể là 1 giá trị Boolean hoặc 1 mảng$db = DB::connect($dsn, array('debug' => 1, 'optimize' => 'portability'));V.2.3. Kiểm tra lỗiCác phương thức của DB trả về DB_ERROR nếu có lỗi trong quá trình thực hiệnBạn có thể kiểm tra 1 kết quả trả về có phải là lỗi không bằng hàm DB::isError();Nếu DB::isError() trả về true, kết quả trả về của bạn là lỗi, có thể xem thông báo lỗi bằng phương thức $tenbien->getMessage()$db = DB::connect($datasource);if (DB::isError($db)) { die($db->getMessage( ));}V.2.4. Thực thi queryĐể thực thi query, sử dụng phương thức query() của Database Object (đối tượng trả về khi bạn kết nối thành công với CSDL bằng hàm DB::connect() );$db = DB::connect($datasource);$result = $db->query(sql);Cũng tương tự như DB::connect(), bạn có thể kiểm tra lỗi bằng DB::isError()if (DB::iserror($result)) { die($result->getMessage());}V.2.5. Lấy kết quả từ query$row = $result->fetchRow([ mode ]);Hàm fetchRow() trả về mảng các giá trị trên dòng hoặc DB_ERROR (nếu có lỗi)query(sql);while ($row = $result->fetchRow( )) { if (DB::isError($row)) { die($row->getMessage( )); } // do something with the row}?>V.2.5. Lấy kết quả từ query (2)$row = $result->fetchRow([ mode ]);mode:DB_FETCHMODE_ORDERED: Các cột được liệt kê trên $row theo thứ tự 0,1,2...DB_FETCHMODE_ASSOC : Các cột được liệt kê với khóa là tên của các cộtDB_FETCHMODE_OBJECT: Các cột được liệt kê thành các trường của đối tượngV.2.5. Lấy kết quả từ query (3)query("select * from sv"); $row = $table->fetchRow(); var_dump($row); $row = $table->fetchRow(DB_FETCHMODE_ASSOC); var_dump($row); $row = $table->fetchRow(DB_FETCHMODE_OBJECT); var_dump($row); echo "Hoten: {$row->hodem} {$row->ten}, Ngay sinh: {$row->ngaysinh}";?>V.2.6. Giải phóng bộ nhớquery("select * from sv"); $row = $table->fetchRow(); unset($row); $table->free(); $db->disconnect();?>V.3. Các chức năng nâng cao với PEAR DBV.3.1. Query templateV.3.2. Prepare/ExecuteV.3.3. Các hàm tiện íchV.3
Các file đính kèm theo tài liệu này:
- bai_giang_php_hypertext_preprocessing_nguyen_phu_quang.ppt