Hướng đối tượng tt• Khai báo • Hàm tạo 4... Hướng đối tượng tt– Method phải được khai báo ngay bên trong khai báo lớp – Dùng biến giả $this để truy xuất các member và method trong lớp
Trang 1PHP Advances
Luong Tran Hy Hien, FIT of HCMUP
Trang 2Nội dung
1 Hướng đối tượng
2 Truyền nhận dữ liệu (POST/GET)
3 Cookies, Sessions
4 Xử lý ngày tháng
5 Xử lý tập tin & thư mục
6 Upload tập tin lên Server
7 Hình ảnh
8 E-mail, Secure E-mail
Trang 31 Hướng đối tượng
Trang 41 Hướng đối tượng (tt)
• Khai báo
• Hàm tạo
4
Trang 51 Hướng đối tượng (tt)
class tên_lớp
{
các thuộc tính và phương thức }
$tên_biến = new tên_lớp();
Đối tượng sẽ tự động bị hủy khi không còn tham chiếu nào đến nó
$tên_biến = NULL ;
Trang 61 Hướng đối tượng (tt)
– Method phải được khai báo ngay bên trong khai
báo lớp – Dùng biến giả $this để truy xuất các member và
method trong lớp – Dùng toán tử -> để truy xuất đến member và
Trang 71 Hướng đối tượng (tt)
public function construct (danh sách tham số)
{
khởi tạo giá trị các member }
constructor được tự động thực hiện khi đối tượng được tạo
public function destruct ()
{
dọn dẹp }
destructor được tự động thực hiện khi đối tượng bị hủy
7
7
Trang 81 Hướng đối tượng (tt)
Trang 9• Khai báo
const TÊN_HẰNG = giá trị;
• Truy xuất
9
Trang 101 Hướng đối tượng (tt)
Trang 111 Hướng đối tượng (tt)
Trang 121 Hướng đối tượng (tt)
• Khai báo lớp con
class lớp_con extends lớp_cha
{
các thuộc tính và phương thức}
Tất cả các member và method được khai báo
public hay protected trong lớp cha được thừa kế
và có thể sử dụng trong lớp con
12
Trang 1313
Trang 14Sự đa hình
• Khai báo lớp trừu tượng
{
// các thuộc tính abstract public function phương_thức_trừu_tượng(…);
… // các phương thức khác }
Không thể tạo đối tượng trực tiếp từ lớp trừu tượng
Lớp con bắt buộc phải định nghĩa các phương thức trừu tượng của lớp cha
14
Trang 16abstract class tên_lớp implements giao_diện
{
… }
Các lớp sử dụng Interface hay kế thừa từ một lớp sử dụng Interface bắt buộc phải định nghĩa tất cả các phương thức trong Interface đó
16
Trang 171 Hướng đối tượng (tt)
Trang 181 Hướng đối tượng (tt)
1 Hà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ượng
2 Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize()
<?php
class AClass { var $a ;
function AClass() { }
};
$ob1 = new AClass();
$ob1 ->a = 10 ;
$ob1 ->b = 100 ;
$ob1 ->c = “Nguyen Ngoc Thuy Hang" ;
$luu = serialize ( $ob1 );
echo " $luu <br>" ;
$ob2 = unserialize ( $luu );
var_dump ( $ob2 );
?>
Trang 192 Truyền nhận dữ liệu (POST/GET)
2.1 Cơ chế truyền nhận dữ liệu
2.2 Các cách truyền nhận dữ liệu
19
Trang 20Cơ chế truyền nhận dữ liệu
Trang 21Cơ chế truyền nhận dữ liệu
?
Trang 232 Truyền nhận dữ liệu (POST/GET)
• Trang web nhập dữ liệu
– Cách 1 : truyền dữ liệu trực tiếp qua url
• Sử dụng liên kết để sửa lại url
• Thông qua đối tượng location – Cách 2 : truyền dữ liệu thông qua form
• Sử dụng đối tượng < form >
• Nhập liệu thông qua các formfield
• Thực hiện việc truyền dữ liệu thông qua submit
• Hai phương thức gởi dữ liệu GET / POST
• Trang web nhận dữ liệu (dùng các biến toàn cục)
– Cách 1 : $_GET [“ biến ”]
– Cách 2 : $_POST [“ biến ”]
Trang 253.1 Cookies là gì?
của client
sẽ gửi kèm file cookie đã lưu lần trước lên server
Trang 263.2 Sử dụng cookies
• Lệnh ghi cookie
setcookie(name, value, expire, path, domain);
• name : Tên cookie
• value : Giá trị cookie
• expire : Thời điểm mà cookie hết hiệu lực
• path : Đường dẫn trên server mà cookie có hiệu lực
• domain : Xác định tên miền mà cookie được gởi đi
• Bắt buộc phải xuất hiện trước thẻ <html>
• Lấy giá trị cookie
echo $_COOKIE[“cookieName"];
• Xóa cookie
setcookie(“cookieName", "", time() -3600);
Trang 293.4 Session là gì?
Là thông tin về client được server lưu trên máy của server
Sử dụng session lưu định danh duy nhất cho từng client
Mục đích lưu biến dữ liệu dùng chung cho nhiều trang
trong 1 phiên làm việc của client
Trang 303.5 Sử dụng session
• Khởi động Session
session_start();
• Ghi & Đọc giá trị Session
$_SESSION[“sessionVar”] = $value ;
$_SESSION[“sessionVar”] = array();
$_SESSION[“sessionVar”] [] = $value;
if (isset($_SESSION[“sessionVar"] )
echo $_SESSION [“sessionVar"];
• Hủy Biến trong Session
unset( $_SESSION[“sessionVar”] );
• Hủy cả Session
Trang 313.6 Ví dụ : Đếm số lần duyệt trang web
<?php
session_start( );
if (isset($_SESSION ["count"]))
$_SESSION ["count"] = $_SESSION ["count"] + 1;
else
$_SESSION ["count"] = 1;
print “ You've looked at this page ”
$_SESSION ['count'] “ times ”;
?>
Trang 323.6 VD2: Ứng dụng cho Login
• Làm thế nào để ngăn không cho người dùng truy cập vào các trang web nếu chưa đăng nhập?
$_SESSION[“Username”] : Lưu Tên đăng nhập
$_SESSION[“Authentication”] : Lưu Loại
quyền đăng nhập
Trang 33Ứng dụng cho Login – Gồm 4 bước
1 Tạo trang login.html yêu cầu người dùng đăng nhập.
2 Tạo trang validateuser.php xử lí thông tin đăng nhập
từ trang login.htm
– Kết nối với CSDL, kiểm tra thông tin đăng nhập có hợp lệ hay không ?
• Nếu không hợp lệ thì cho redirect về trang login.html
• Nếu hợp lệ thì dùng một biến trong Session để lưu trạng thái login thành công
– Ví dụ: $_SESSION[“IsLogin”] = true
– Lưu ý : Phải đặt giá trị mặc định cho biến Session này là
false khi khởi tạo một Session.
3 Tạo trang logout.php là trang xử lý khi người dùng logout
Reset trạng thái login là chưa đăng nhập
($_SESSION[“IsLogin”] = false).
Trang 34Session - Ứng dụng cho Login
đoạn mã sau để kiểm tra người dùng đã
đăng nhập hay chưa, nếu chưa thì redirect lại
<?php
session_start();
if ( !isset( $_SESSION [“IsLogin”] ) ||
header(“Location: login.htm ”);
?>
Trang 35Giỏ hàng (shopping cart)
Session : Array : Mathang [ ]
Session : Array : Soluong[ ]
{‘Book1’, ‘Book2’, ‘Book3’}
{13, 2, 7}
Xóa biến trong Session
Ghi xuống CSDL
Trang 36Session – Cookie – Database
Số client Số trang web
sử dụng
Trang 37Break
Trang 384 Xử lý ngày tháng
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
Trang 394 Xử lý ngày tháng
<?php
// Assuming today is: March 10th, 2001, 5:16:18 pm
$today = date ( "F j, Y, g:i a" ); // March 10, 2001, 5:16 pm
$today = date ( "m.d.y" ); // 03.10.01
$today = date ( "j, n, Y" ); // 10, 3, 2001
$today = date ( "Ymd" ); // 20010310
$today = date ( 'h-i-s, j-m-y, it is w Day z ' );
// 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date ( '\i\t \i\s \t\h\e jS \d\a\y.' ); // It is the 10th day.
$today = date ( "D M j G:i:s T Y" ); // Sat Mar 10 15:16:08 MST 2001
$today = date ( 'H:m:s \m \i\s\ \m\o\n\t\h' ); // 17:03:17 m is month
$today = date ( "H:i:s" ); // 17:16:17
?>
Trang 40DAYS
d - day of the month 2 digits (01-31)
j - day of the month (1-31)
D - 3 letter day (Mon - Sun)
l - full name of day (Monday - Sunday)
N - 1=Monday, 2=Tuesday, etc (1-7)
S - suffix for date (st, nd, rd)
F - Full name of month (January - December)
m - 2 digit month number (01-12)
n - month number (1-12)
M - 3 letter month (Jan - Dec)
t - Days in the month (28-31)
YEAR
L - leap year (0 no, 1 yes)
o - ISO-8601 year number (Ex 1979, 2006)
Date and time formats
40
Trang 425 Xử lý tập tin & thư mục
Trang 435 Xử lý tập tin & thư mục (tt)
– 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 file.
– khác 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àm.
– thông báo warning nếu không tìm thấy file nhưng không dừng chương trình.
43
Trang 445 Xử lý tập tin & thư mục (tt)
Trang 455 Xử lý tập tin & thư mục (tt)
• Có thể đặt lệnh include bên trong 1 cấu trúc điềukiện hoặc cấu trúc lặp,
• 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ần,
• Việc này giúp hỗ trợ cho việc thiết kế kiến trúc
45
Trang 465 Xử lý tập tin & thư mục (tt)
điểm khác biệt là chỉ include 1 lần, lần sau nếu gặplại file này thì ko include nữa
Vì phân biệt chữ hoa/thường nên
include_one chèn thêm lần thứ hai
Trang 475 Xử lý tập tin & thư mục (tt)
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 include
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 include
• Cá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)
Trang 485 Xử lý tập tin & thư mục (tt)
var_dump ( ini_get ("include_path"));
ini_set ("include_path", "/inc"); // Works in all PHP versions
var_dump ( ini_get ("include_path"));
ini_restore ("include_path");
var_dump ( ini_get ("include_path"));
?>
Trang 495 Xử lý tập tin & thư mục (tt)
file_exist(), is_file(), is_dir(), is_readable(),
is_writeable(), is_executable(), filesize(), fileatime()
print " $file is " ( is_file ( $file )? "" : "not " ) "a file<br/> \n " ;
print " $file is " ( is_dir ( $file )? "" : "not " ) "a directory<br/> \n " ; print " $file is " ( is_readable ( $file )? "" : "not " ) "readable<br/> \n " ; print " $file is " ( is_writable ( $file )? "" : "not " ) "writable<br/> \n " ; print " $file is " ( filesize ( $file )) " bytes<br/> \n " ;
print " $file was accessed on " date ( "D d M Y g:i A" ,
fileatime ( $file )) "<br/>" ; print " $file was modified on " date ( "D d M Y g:i A" ,
filemtime ( $file )) "<br/>" ; print " $file was changed on" date ( "D d M Y g:i A" ,
filectime ( $file )) "<br/>" ; }
outputFileTestInfo( "c: \\ windows \\ system32 \\ cmd.exe" );
?>
Trang 505 Xử lý tập tin & thư mục (tt)
fopen ( $filename , $mode );
fwrite ( $handle , $string );
fread ( $handle , $length );
fgets ( $handle );
sprintf ( $format );
fscanf ( $handle , $format );
fseek ( $handle , $offset );
fclose ( $handle );
Trang 515 Xử lý tập tin & thư mục (tt)
?>
Trang 54while ($file=readdir($dir)) {
echo "$file\n";}
closedir($dir);
?>
Trang 556 Upload tập tin lên server
• Gửi các file lên server (upload) là một chức năngkhông thể thiếu đối với các ứng dụng Web-based
• Để form có thể upload file, ta phải xác định
• Với PHP, bạn có thể xác định kích thước lớn nhấtcủa file upload bằng cách đặt thêm 1 hiddenfield có tên MAX_FILE_SIZE trước control file
55
Trang 566 Upload tập tin lên server
file
Upload.php
• $_FILES[“file”][ "name" ]
• $_FILES[“file”][ "type" ]
• $_FILES[“file”][ "size" ]
• $_FILES[“file”][ "tmp_name" ]
• $_FILES["file”]["error"]
Trang 576 Upload tập tin lên server
$ FILES[' taptin ']['name'] Name of uploaded file test.gif
$_FILES[' taptin ']['tmp_name'] Path to temporary file /tmp/phprDfZvN
$_FILES[' taptin ']['size'] Size (in bytes) of uploaded file 6835
$_FILES[' taptin ']['error'] An error code corresponding
to a PHP constant
UPLOAD_ERR_FO RM_SIZE
$_FILES[' taptin ']['type'] MIME type of uploaded file
(where given by client)
image/gif
Mảng $_FILE
Trang 58element named MAX_FILE_SIZE
6 Upload tập tin lên server
Mã lỗi
Trang 596 Upload tập tin lên server
Trang 606 Upload tập tin lên server
Trang 61Kiểm tra lỗi, định dạng, kích
thước File upload
• “image/pjpeg” IE nhận đây là file jpeg
– $_FILES[“…”][“size”] : Kích thước file tính theo byte
– $_FILES[“…”][“error”] : Mã lỗi khi upload File
• = 0 : Không có lỗi
• > 0 : Có lỗi
Trang 627 Hình ảnh
Vẽ ảnh từ văn bản
Trang 638 E-mail, Secure E-mail
• Sử dụng thư viện open source: PHP Mailer
Trang 64Gởi email sử dụng Mail Server của GMail
Trang 66Toán tử điều khiển lỗi
• Toá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.
Trang 67Tham khảo
• Website W3school
• Slide lập trình Web, ĐH KHTN, 2007
67
Trang 68Q & A
Trang 69THE END