Bài giảng Hệ thống mã nguồn mở - Chương 5: Ngôn ngữ kịch bản PHP nâng cao - Nguyễn Minh Thành
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống mã nguồn mở - Chương 5: Ngôn ngữ kịch bản PHP nâng cao - Nguyễn Minh Thành", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_he_thong_ma_nguon_mo_chuong_5_ngon_ngu_kich_ban_ph.pptx
Nội dung text: Bài giảng Hệ thống mã nguồn mở - Chương 5: Ngôn ngữ kịch bản PHP nâng cao - Nguyễn Minh Thành
- Môn Các Hệ Thống Mã Nguồn Mở 1 Chương 5 : NGÔN NGỮ KỊCH BẢN PHP NÂNG CAO Giảng viên : ThS. Nguyễn Minh Thành Email : thanhnm@itc.edu.vn
- Môn Các Hệ Thống Mã Nguồn Mở 2 Nội Dung 1. Cookie 2. Session 3. Xử lý Form 4. Gửi mail 5. Xử lý File 6. Chuyển hướng website với .htaccess 7. Bắt lỗi chương trình 8. Hướng đối tượng trong PHP
- Môn Các Hệ Thống Mã Nguồn Mở 3 Cookie a- Cookie là mẫu tin nhỏ, có cấu trúc, dạng text lưu ở máy client khi truy cập một website (nếu kịch bản trong trang đó có chức năng thiết lập cookie).Cookie được lưu ở thư mục : C:\Documents and Settings\Administrator\Cookies Ví dụ đây là một mẫu cookie khi viếng trang www.ibm.com UnicaNIODID 4yZ3oOSlqrO-WrSL3kV ibm.com/ 1600 1465922944 30475811 543399952 30113713 * (tên tệp ndt@ibm[1]) ndt là PC name của client
- Môn Các Hệ Thống Mã Nguồn Mở 4 Cookie (tt) b- Thiết lập cookie Cú pháp: setcookie(name, value, expire[, path, domain]); Trong PHP, câu lệnh setcookie phải đặt trước thẻ Ví dụ : Trang CreateCookie.php Hàm time() trả về số giây đã trôi qua bắt đầu từ 01-Jan-1970 Một dạng thời gian dùng trong hệ điều hành Unix
- Môn Các Hệ Thống Mã Nguồn Mở 5 Cookie (tt) d- Đọc cookie Tệp ReadCookie.php "; else echo "Welcome guest! "; ?> $_COOKIE[] là một biến mảng toàn cục Hàm isset() kiểm tra một biến đã được khai báo, khởi gán chưa
- Môn Các Hệ Thống Mã Nguồn Mở 6 Session a- Session là một phiên làm việc kể từ khi client truy cập vào website cho đến khi đóng trình duyệt hay abandon(kết thúc) phiên. PHP đưa ra biến toàn cục $_SESSION[] để lưu trữ thông tin, và biến này có thể truy cập từ mọi trang PHP trong phiên. b- Khai báo và thiết lập Session session_start(); // hàm session_start() phải đặt trước thẻ $_SESSION['username']=“NguyenMinhThanh"; Ví dụ : Trang Save_Session.php Hàm header() chuyển hướng trình duyệt đến URL sau Location
- Môn Các Hệ Thống Mã Nguồn Mở 7 Session (tt) c- Truy cập biến Session Trang : Read_Session.php d- Xóa bỏ biến Session unset($_SESSION[‘tên']); session_destroy(); Đây là các câu lệnh dùng khi Logout, tuy nhiên khi session_destroy() phải lưu ý, vì có xóa những biến Session của hệ thống không?
- Môn Các Hệ Thống Mã Nguồn Mở 8 Session (tt) Tóm tắt: Thiết lập session_start(); $_SESSION[‘tên’]=giá_trị; Truy cập: session_start(); $biến = $_SESSION[‘tên’]; Xóa giá trị đã thiết lập : unset($_SESSION[‘tên’]); Hủy bỏ toàn bộ biến $_SESSION[]: session_destroy(); Session có rất nhiều ứng dụng, ví dụ như lưu trữ thông tin về giỏ hàng trong E-commerce
- Môn Các Hệ Thống Mã Nguồn Mở 9 Form – truyền nhận thông tin Giả sử method của Form là POST => server sẽ nhận được thông qua biến toàn cục $_POST[‘tên’], với ‘tên’ là giá trị của thuộc tính name của phần tử trong form. Cú pháp Form Biệt lệ : Các checkbox cùng tên -Phải đặt cùng tên như là một phần tử của mảng động, ví dụ box[] -Khi truy cập ở server chỉ lấy phần tên, ví dụ $_POST[‘box’], và trả về là một mảng gồm các value được chọn. -Các trường hợp khác $_POST là một chuổi. -Có thể dùng $_REQUEST thay cho $_POST và $_GET. -Lưu ý: w3schools.com gọi chúng là Function, có lẽ không đúng!
- Môn Các Hệ Thống Mã Nguồn Mở 10 Ví dụ: Tệp DangKy.htm Họ tên: Đăng ký: Java C Pattern Trí tuệ nhân tạo Tệp XuLy.php ”; while(list($k,$v)=each($hocphan) $str+=$k.”-”$v.” ”; echo $str; ?>
- Môn Các Hệ Thống Mã Nguồn Mở 11 Xây dựng form Login “tự gọi” Một trang PHP tự gọi lại chính nó là một phong cách nhiều LTV PHP ưa thích. Dựa trên các kỹ thuật: -Chỗ nào cần đưa các giá trị php chỉ cần - Biến toàn cục lưu tên trang hiện thời : $_SERVER[‘PHP_SELF’] - Câu lệnh if else endif của PHP để điều khiển luồng HTML Từ những kiến thức trên ta xây dựng một form đăng nhập.
- Môn Các Hệ Thống Mã Nguồn Mở 12 Trang Login.php You are'nt login! > User Name: Password: You are login. - Sinh viên hãy dùng include() để ghép vào một trang khác.
- Môn Các Hệ Thống Mã Nguồn Mở 13 Gửi mail Cú pháp: mail(to,subject,message,headers,parameters) Ý nghĩa các tham số: - to, subject, message : như ý nghĩa các text box khi soạn mail - headers :tùy chọn, có thể sử dụng Bcc, Cc - parameter: tùy chọn, các thông số về trình soạn, gởi mail Trong phần message: sử dụng ký hiệu \n để xuống dòng.
- Môn Các Hệ Thống Mã Nguồn Mở 14 Ví dụ : Tệp Send_mail.php Lưu ý: -người gởi phải có một đia chỉ mail. Theo dõi các kỹ thuật chống spam của mỗi trình gởi, nhận mail của người nhận! -Phối hợp với form để soạn thảo một trình gởi mail -Có thể lập trình để gởi mail đến danh sách các địa chỉ đã lưu trong CSDL
- Môn Các Hệ Thống Mã Nguồn Mở 15 Xử Lý File 1. Mở file $file=fopen("welcome.txt","r") or exit("Unable to open file!");
- Môn Các Hệ Thống Mã Nguồn Mở 16 Xử Lý File 2- Đóng file fclose($file); Cách khác: Sử dụng hàm file(path) mở đọc file và đóng file luôn Ví dụ : $myfile = 'vanban.txt'; $lines = file($myfile); // trả về mảng các dòng văn bản echo("Số dòng: ".count($lines)." "); // cũng có thể dùng foreach($lines as $key=>$value) foreach($lines as $line) { echo($line." ");} 3- Kiểm tra EOF if (feof($file)) echo "End of file";
- Môn Các Hệ Thống Mã Nguồn Mở 17 Xử Lý File 4- Đọc từng dòng trong file ";} fclose($file); ?> 5- Đọc từng ký tự trong file
- Môn Các Hệ Thống Mã Nguồn Mở 18 Xử Lý File 6-Upload file Filename:
- Môn Các Hệ Thống Mã Nguồn Mở 19 Xử Lý File 6-Upload file Upload_file.php 0) { echo "Return Code: " . $_FILES["file"]["error"] . " ";} else { echo "Upload: " . $_FILES["file"]["name"] . " "; echo "Type: " . $_FILES["file"]["type"] . " "; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb "; echo "Temp file: " . $_FILES["file"]["tmp_name"] . " "; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. " } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } ?>
- Môn Các Hệ Thống Mã Nguồn Mở 20 Cơ bản về .htaccess 1. Định nghĩa htaccess: Apache cung cấp khả năng cấu hình thông qua những files truy cập siêu văn bản . Những files này cho phép thay đổi tinh chỉnh của Apache (httpd.conf) . Theo mặc định file này có tên .htaccess. .htaccess có tác dụng trên thư mục hiện hành (nơi chưa nó) và tất cả các thư mục con. Vì vậy, muốn sử dụng .htacess để quản lí truy cập vào website của mình, đơn giản bạn chỉ việc soạn thảo một file .htaccess, và lưu nó vào thư mục root của website.
- Môn Các Hệ Thống Mã Nguồn Mở 21 Cơ bản về .htaccess Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và .htaccess. Ví dụ : #Enable Rewrite mod <<<đây là comment, dòng này sẽ không được thực thi #trong .htaccess RewriteEngine on Lưu ý : .htaccess là một công cụ rất mạnh trong việc quản lí website. Một lỗi cú pháp nhỏ (thậm chí là một khoản trắng) cũng khiến website của bạn hoạt động không được bình thường như trước. →Do vậy trước khi làm việc với .htaccess, bạn nên backup cẩn thận dữ liệu của mình, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.
- Môn Các Hệ Thống Mã Nguồn Mở 22 Cơ bản về .htaccess Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và .htaccess. Ví dụ : #Enable Rewrite mod <<<đây là comment, dòng này sẽ không được thực thi #trong .htaccess RewriteEngine on Lưu ý : .htaccess là một công cụ rất mạnh trong việc quản lí website. Một lỗi cú pháp nhỏ (thậm chí là một khoản trắng) cũng khiến website của bạn hoạt động không được bình thường như trước. →Do vậy trước khi làm việc với .htaccess, bạn nên backup cẩn thận dữ liệu của mình, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.
- Môn Các Hệ Thống Mã Nguồn Mở 23 Cơ bản về .htaccess • Những kí tự đặc biệt # : comment [F] : chỉ định server sẽ trả về client trang lỗi 403 nếu truy cập vào những nơi không được phép [L] : ấn định rằng bước trước đã xong thì ngừng và không tiếp tục thực thi lệnh rewrite tiếp theo nữa. [N] : chỉ thị cho server tiếp tục rewrite cho đến khi tất cả các mục chỉ định được rewrite hoàn toàn. [G] : Chỉ định server trả về client trang báo lỗi không tồn tại (no longer exit) [P] : chỉ định server điểu kiển các yêu cầu được ấn định bởi mod_proxy [C] : Chỉ định server thực hiện rule hiện hành song song với rule trước đó [R] : chỉ định server đổi hướng request sang một trang khác trong trường hợp trình duyệt gởi yêu cầu duyệt một trang được sửa chữa đường dẫn (rewrite) trước đó.
- Môn Các Hệ Thống Mã Nguồn Mở 24 Cơ bản về .htaccess • Những kí tự đặc biệt [NC] : Chỉ định server so khớp nhưng kí tự không phân biệt hoa thường. Ví dụ : RewriteCond %{HTTP_REFERER} !^ [NC] [PT]: có nghĩa là dùng kí tự để buộc "rewrite engine" ấn định bảng giá trị của uri trở thành giá trị của tên files [OR] : các biểu thức được nối tiếp nhau bằng toán tử OR, trong đó biểu thức nào đúng, sẽ là quy tắc để lệnh Rewrite áp dụng. Ví dụ: RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR] RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR] RewriteCond %{HTTP_USER_AGENT} ^attach [OR] RewriteRule ^.* - [F,L] [NE] : Chỉ định server xử lí các gói tin trả về mà không dùng kí tự thoát
- Môn Các Hệ Thống Mã Nguồn Mở 25 Cơ bản về .htaccess • Những kí tự đặc biệt [NS] : Chỉ định server bỏ qua thư mục hiện hành nếu request nhắm vào thư mục con. [QSA] : chỉ định server gắn chuỗi truy vấn vào cuối cùng của URL [S=x] : Chỉ định server bỏ qua không xem xét các X rules tiếp theo nữa nếu một rule đã được thực thi. [T=MIME-type] : Khai báo định dạng files của server [] : chỉ định các kí tự đặt đặt trong [] sẽ được match. Cụ thể [xyx] thì các request có mang theo các kí tự x, y hoặc z sẽ được match. + : chỉ định nội dung đừng trước dấu + phải xuất hiện ít nhất 1 lần [^] : Ngược lại với [], các kí tự được đặt theo dạng [xyz^] sẽ không được match. [a-z] : Dấu ‘-‘ đặt giữa 2 kí tự bên trong cặp dấu [] sẽ match tất cả các kí tự nằm trong khoảng từ kí tự đầu đến kí tự cuối.
- Môn Các Hệ Thống Mã Nguồn Mở 26 Cơ bản về .htaccess • Những kí tự đặc biệt a{n} : chỉ định chính xác n kí tự a được match. Ví dụ a{3} thì 3 kí tự a sẽ được match. a{n,} : Tương tự như trên, nhưng trong trường hợp này sẽ match các kí tự a từ na trở lên. a{n,m} : Chỉ định một khoảng chính xác các kí tự (m-n)a sẽ được match. () : Nhóm các chuỗi ^ : Bắt đầu bằng $ : Kết thúc bằng ( .*$: kết thúc bằng bất cứ gì) ? : chuỗi có hoặc không ! : phủ định. VD: “!string” sẽ match tất cả các kí tự, ngoại trừ string - : Loại đi một chức năng, hoặc một rule đang thực thi nào đó. * : Tất cả đều được | : Hoặc \ : Kí tự thoát
- Môn Các Hệ Thống Mã Nguồn Mở 27 Cơ bản về .htaccess • Những kí tự đặc biệt -d : Kiểm tra thư mục có tồn tại hay không? -f : Kiểm tra file có tồn tại hay không -s : Kiểm tra giá trị của file có khác 0 hay không? Mã chuyển hướng trang báo lỗi - 401 - Authorization Required : Lỗi chưa được xác thực user và password - 400 - Bad request : Lỗi truy cập không hợp lệ, do server không chấp nhận request, hoặc request thiếu một số yêu cầu nào đó. - 403 - Forbidden : Lỗi truy cập vào trang bị cấm - 500 - Internal Server Error : Lỗi do server - 404 - Wrong page : Lỗi truy cập vào trang không tồn tại - 301 - Moved Permanently: 302 - Moved Temporarily: Lỗi truy cập vào trang đã bị di chuyển.
- Môn Các Hệ Thống Mã Nguồn Mở 28 Các ví dụ trong .htaccess 1. Ngăn chặn hotlink Nhiều người khác copy ảnh từ server của mình và đưa lên trang web của họ. Thêm vào .htaccess đoạn mã dưới đây sẽ giúp ngăn chặn ảnh hiển thị trên website khác: Options +FollowSymlinks #No hotlink RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com/ [nc] RewriteRule .*.(gif|jpg|png)$ [nc]
- Môn Các Hệ Thống Mã Nguồn Mở 29 Các ví dụ trong .htaccess 1. Ngăn chặn hotlink Nhiều người copy ảnh từ server của bạn và đưa lên trang web của họ. Thêm vào .htaccess đoạn mã dưới đây sẽ giúp bạn ngăn chặn ảnh hiển thị trên website khác: Options +FollowSymlinks #No hotlink RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com/ [nc] RewriteRule .*.(gif|jpg|png)$ [nc]
- Môn Các Hệ Thống Mã Nguồn Mở 30 Các ví dụ trong .htaccess 2. 301 Redirect Nếu ta chuyển domain, hoặc chỉ muốn chuyển một trang cũ về một trang mới và không muốn lo lắng về các kết quả search từ google, sử dụng đoạn mã sau Redirect 301 /d/file.html 3. Viết lại tên miền cũ sang tên mới Sử dụng đoạn mã dưới đây để chuyển tất cả các link từ tên miền cũ sang tên miền mới: #Chuyển hướng từ tên miền cũ sang tên mới RewriteEngine On RewriteRule ^(.*)$ [R=301,L]
- Môn Các Hệ Thống Mã Nguồn Mở 31 Các ví dụ trong .htaccess 4. Tạo trang báo lỗi riêng Nếu không muốn dùng các trang báo lỗi có sẵn của host, ta có thể tạo các trang báo lỗi riêng và cấu hình vào file htaccess như sau: ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php 5. Cấm IP truy cập Nếu có 1 IP thường xuyên spam website, ta có thể cấm IP đó như dòng 2, hoặc cấm 1 dải IP như dòng 3: allow from all deny from 113.190.183.138 deny from 113.190
- Môn Các Hệ Thống Mã Nguồn Mở 32 Các ví dụ trong .htaccess 6. Bảo vệ file 7. Đặt mã cho thư mục và file Đoạn mã dưới đây sẽ từ chối Đặt mã & quyền truy cập vào thư mục/file như khi người dùng truy cập vào sau: bất kỳ file nào và gửi về lỗi # Đặt mã cho thư mục 403: resides AuthType basic #Protect .htaccess File AuthName "Thư mục này đã được bảo vệ" AuthUserFile /home/path/.htpasswd order allow,deny AuthGroupFile /dev/null deny from all Require valid-user # Đặt mã cho file AuthType Basic AuthName "Prompt" AuthUserFile /home/path/.htpasswd Require valid-user
- Môn Các Hệ Thống Mã Nguồn Mở 33 Các ví dụ trong .htaccess 9. Đặt trang mặc định 10. Bỏ một nội dung ở URL Đặt trang web mặc định cho thư Để chuyển url từ: mục nào đó. Ví dụ đặt file về -> about.html thay cho file index.html: bạn chỉ cần thêm vào file .htaccess đoạn mã sau #Đặt trang mặc định (index) DirectoryIndex about.html RewriteRule ^category/(.+)$ [R=301,L] 11. Bỏ phần đuôi file ở URL Không muốn hiện .php ở url, hãy thêm đoạn code sau: RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
- Môn Các Hệ Thống Mã Nguồn Mở 34 Các ví dụ trong .htaccess 12. Thêm / vào cuối URL Một vài bộ máy tìm kiếm (như Yahoo)tự động bỏ dấu / ở cuối url. Website cũng có thể được truy cập có hoặc không có dấu / ở sau cùng url. Điều này không tốt với các bộ máy tìm kiếm (sẽ bị coi là duplicated content). Thêm đoạn mã dưới đây vào .htaccess để giải quyết vấn đề đó: #Thêm / vào cuối URL RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !# RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ [L,R=301]
- Môn Các Hệ Thống Mã Nguồn Mở 35 Các ví dụ trong .htaccess 13. Không cho "browse" thư mục Để ngăn chặn truy cập vào tên file trong thư mục nào đó (ví dụ thư mục plugins của wordpress), thêm đoạn mã sau vào file .htacess: Options All -Indexes Nếu muốn cho phép browse thư mục bạn chỉ cần đổi lại là: Options All +Indexes
- Môn Các Hệ Thống Mã Nguồn Mở 36 Bắt lỗi chương trình • Khi có vấn đề trong quá trình thực thi, PHP luôn cố gắng đưa ra các thông báo lỗi hữu ích để người dùng (lập trình viên) xác định được vấn đề.
- Môn Các Hệ Thống Mã Nguồn Mở 37 Thay đổi mức độ bắt lỗi • Các cấu hình về thông báo lỗi nằm trong file php.ini • Cấu hình trong php.ini error_reporting = E_ALL & ~E_NOTICE display_errors = On | Off • Cấu hình bằng script error_reporting(OPTIONS); error_reporting(0); ini_set('display_errors',‘On');
- Môn Các Hệ Thống Mã Nguồn Mở 38 Tự bắt lỗi chương trình • Khi chương trình thực thi có thể phát sinh lỗi ở một số hàm được gọi, nếu thấy không chắc chắn ta có thể bắt lỗi bằng hàm : die(“message”) functionname() or die(“message”); • Khi hàm functionname có lỗi hàm die sẽ dừng chương trình và xuất thông báo. • Trong chương trình có thể xảy ra những lỗi về logic, những lỗi này có thể được bắt thủ công If ($height_of_door > $height_of_house) { echo “This is impossible ”; exit(); } • Hoặc đẩy lỗi lên cho PHP tự thông báo. If ($height_of_door > $height_of_house) { trigger_error(“Impossible condition”,E_USER_ERROR); }
- Môn Các Hệ Thống Mã Nguồn Mở 39 Hướng đối tượng trong PHP “Lập trình hướng đối tượng là 1 phương pháp viết mã cho phép các lập trình viên nhóm các action tượng tự nhau vào các class”. Điều này giúp mã lệnh giữ vững được nguyên lý DRY “don’t repeat yourself” (không lặp lại chính nó) và dễ dàng để bảo trì. Một lợi ích to lớn của nguyên lý lập trình DRY là: nếu một phần thông tin nào đó được thay đổi trong chương trình, thì thông thường chỉ cần có duy nhất 1 thay đổi để cập nhật lại mã lệnh. Một trong những ác mộng lớn nhất đối với các lập trình viên là bảo trì mã lệnh, nơi dữ liệu được khai báo đi khai báo lại nhiều lần, họ phải tìm kiếm, làm việc trên các dữ liệu và chức năng trùng lặp.
- Môn Các Hệ Thống Mã Nguồn Mở 40 Hướng đối tượng trong PHP Hiểu Về Đối Tượng (Objects) Và Lớp (Class) Nhiều lập trình viên có kinh nghiệm cho rằng hai khái niệm object và class có thể thay thế cho nhau. Tuy vậy, đây không phải là vấn đề đáng quan tâm, mặc dù sự khác nhau giữa object và class có thể sẽ rất phức tạp khiến bạn phải bù đầu để tìm hiểu khi mới tiếp xúc với chúng.
- Môn Các Hệ Thống Mã Nguồn Mở 41 Hướng đối tượng trong PHP Hiểu Về Đối Tượng (Objects) Và Lớp (Class) Một object sau đó, cũng giống như một ngôi nhà thực tế được xây dựng dựa trên bản thiết kế này. Dữ liệu trong object ở đây có thể được xem như là gỗ, dây điện, và bê tông để tạo nên ngôi nhà hoàn chỉnh: mà không hề có chi tiết cách tạo ra chúng trong bản thiết kế. Tuy nhiên, khi kết hợp tất cả lại với nhau, nó sẽ trở thành một ngôi nhà hoàn chỉnh đến từng chi tiết. Các Class xử lý cấu trúc dữ liệu và các action, đồng thời sử dụng các thông tin đó để xây dựng các object. Có thể có nhiều hơn một object được xây dựng từ cùng một class tại cùng một thời điểm, mỗi object này đều là 1 cá thể độc lập và không phụ thuộc lẫn nhau. Trở lại vấn đề xây dựng, điều này cũng giống như một quần thể các lô nhà có thể được xây dựng trên cùng một bản thiết kế: 150 ngôi nhà khác nhau đều có hình dạng giống nhau, nhưng có các hộ gia đình và nội thất bên trong đều khác nhau.
- Môn Các Hệ Thống Mã Nguồn Mở 42 Hướng đối tượng trong PHP a- Đặc điểm OOP trong PHP 5.0 : không cho phép đa kế thừa b- Khai báo class Class tên_class{ // khai báo thuộc tính, bản chất là biến dùng trong class // khai báo các phương thức, bản chất là các hàm. Riêng hàm dựng // phải cùng tên với tên của class // sử dụng từ khóa private hay public và protected để xác định chế // độ truy xuất } c- Sử dụng - Tạo biến đối tượng: $tên_object = new tên_class([giá trị khởi tạo]); - Sử dụng thuộc tính, phương thức: + $tên_object->tên_thuộc tính; + $tên_object->tên_phương thức([tham số]);
- Môn Các Hệ Thống Mã Nguồn Mở 43 Hướng đối tượng trong PHP (tt) Ví dụ đơn giản Tệp Class1.php ho_ten = $hten; $this->ngay_sinh=$ngsinh; } } echo "Su dung ham constractor "; $hung=new hoso(“Nguyễn Minh Thành",“12/3/1985"); echo "Họ tên: " . $hung->ho_ten . “, Ngày sinh: " . $hung->ngay_sinh; ?>
- Môn Các Hệ Thống Mã Nguồn Mở 44 Phương Thức Magic Trong OOP • Để giúp cho việc sử dụng các object trở nên thuận tiện hơn, PHP đã cung cấp một số phương thức magic, chúng thường được gọi khi có những action nhất định thường xuyên xảy ra trong các object. Điều này cho phép lập trình viên thực thi một số tác vụ hữu ích dễ dàng. • Phương thức Constructors (hàm dựng) và Destructors (hàm hủy) Khi một object được khởi tạo, nó thường kèm theo nhu cầu thiết lập một vài thứ ngoài lề. Để xử lý điều này, PHP cung cấp phương thức magic__construct(), phương thức này sẽ tự động được gọi ngay khi một object mới được khởi tạo. • Để gọi một hàm khi object bị hủy, chúng ta có sẵn phương thức magic__destruct(). Thông thường nó được sử dụng vào mục đích dọn dẹp một cái gì đó (ví dụ: đóng một kết nối cơ sở dữ liệu).
- Môn Các Hệ Thống Mã Nguồn Mở 45 Phương Thức Magic Trong OOP
- Môn Các Hệ Thống Mã Nguồn Mở 46 Phương Thức Magic Trong OOP
- Môn Các Hệ Thống Mã Nguồn Mở 47 Phương Thức Magic Trong OOP • Convert qua một Chuỗi Nếu muốn echo MyClass ra dưới dạng chuỗi, ta sẽ gặp lỗi. Để tránh được lỗi này, cần sử dụng một phương thức magic khác được gọi là__toString().
- Môn Các Hệ Thống Mã Nguồn Mở 48 Sự kế thừa trong hướng đối tượng • Một Class có thể kế thừa các phương thức và thuộc tính của class khác, bằng cách sử dụng từ khóa extends
- Môn Các Hệ Thống Mã Nguồn Mở 49 Kỹ thuật nạp chồng trong Hướng Đối Tượng Tại một class con, để thay đổi giá trị, tính năng của một thuộc tính hoặc phương thức đã có sẵn ở class cha, chỉ cần ghi đè (nạp chồng) lên nó bằng cách khởi tạo lại chính nó trong class con
- Môn Các Hệ Thống Mã Nguồn Mở 50 Gán tầm vực cho Thuộc Tính và Phương Thức OOP tập trung vào việc “đóng gói” các phương thức và thuộc tính của một đối tượng nào đó. Trong OOP, các thành viên trong một lớp cần phải được xác định xem chúng có thể được truy xuất từ đâu (tính rõ ràng). Có ba khả năng xảy ra: - Chế độ public: Các thành viên nếu được thiết lập ở chế độ này sẽ được nhìn thấy và truy xuất ở mọi nơi trong chương trình. - Chế độ private: Các thành viên nếu được thiết lập ở chế độ này sẽ chỉ được nhìn thấy và truy xuất được ở bản thân lớp định nghĩa thành viên đó. - Chế độ protected: Chế độ này sẽ được dùng để giới hạn truy cập tới các lớp được thừa kế và bản thân lớp định nghĩa thành viên đó. Với PHP5, tất cả các thành viên của một lớp đều phải được khai báo tính rõ ràng với các từ khoá tương ứng là public, protected và private.
- Môn Các Hệ Thống Mã Nguồn Mở 51 Ví dụ minh họa các từ khóa private, protected và public public." "; // bên trong lớp echo $this->protected." "; echo $this->private." "; } } class MyClass2 extends MyClass{ // thừa kế từ lớp MyClass protected $protected = 'Protected2'; function printHello(){ // chồng hàm echo $this->public." "; // thừa kế từ MyClass echo $this->protected." "; // lấy thuộc tính riêng echo $this->private." "; // không thừa kế từ MyClass } } Xem tiếp trang sau về sử dụng các lớp MyClass và MyClass2
- Môn Các Hệ Thống Mã Nguồn Mở 52 $obj = new MyClass(); echo $obj->public; / echo $obj->protected; // lỗi: $protected đã bị đặt ở chế độ bảo vệ echo $obj->private; // lỗi: $private đã bị đặt ở chế độ riêng tư $obj->printHello(); // Hoạt động bình thường, do các thuộc tính được triệu gọi bên trong một phương thức nằm trong lớp. $obj2 = new MyClass2(); echo $obj->public; // Chạy tốt echo $obj2->private; // Chưa được định nghĩa echo $obj2->protected; // Gây lỗi $obj2->printHello(); // Hiển thị Public, Protected2, not Private ?>
- Môn Các Hệ Thống Mã Nguồn Mở 53 Hỏi Đáp ?