Tập bài giảng Lập trình mã nguồn mở - Nguyễn Văn Trung

pdf 165 trang Gia Huy 17/05/2022 3270
Bạn đang xem 20 trang mẫu của tài liệu "Tập bài giảng Lập trình mã nguồn mở - Nguyễn Văn Trung", để 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:

  • pdftap_bai_giang_lap_trinh_ma_nguon_mo_nguyen_van_trung.pdf

Nội dung text: Tập bài giảng Lập trình mã nguồn mở - Nguyễn Văn Trung

  1. LỜI NÓI ĐẦU Ngày nay việc sử dụng Internet và các dịch vụ trên Internet là một phần tất yếu của cuộc sống. Công nghệ Internet và các ứng dụng phát trển trên nền Web và Internet đã và đang làm cho đời sống của mỗi chúng ta thay đổi. Internet là một nguồn thông tin quí giá phục vụ cho nghiên cứu, cho kinh doanh, cho giải trí Vì vậy ngày càng có nhiều ứng dụng trên Internet, sử dụng giao diện Web. Các công nghệ phát triển Web ngày một hoàn thiện. Tập bài giảng giới thiệu công nghệ phổ biến nhất đƣợc dùng để tạo các web site động: Ngôn ngữ kịch bản PHP và chƣơng trình quản lý cơ sở dữ liệu MySQL. Đây là công nghệ rất mạnh và hiệu quả để khai triển khai các dự án mã nguồn mở cũng nhƣ có thể sử dụng để trong việc khai thác, sử dụng và phát triển đƣợc các phần mềm mã nguồn viết bằng PHP và MySQL nhƣ: Joomla, Moodle, Wordpress, Drupal, NukeViet Tập bài giảng Lập trình mã nguồn mở đƣợc biên soạn cho đối tƣợng sinh viên Đại học khoa Công nghệ thông tin, trƣờng Đại học Sƣ phạm kỹ thuật Nam Định. Tập bài giảng đƣợc chia làm 3 chƣơng: Chƣơng 1: Tổng quan về PHP và MySQL Chƣơng 2: Lập trình với PHP Chƣơng 3: Sử dụng PHP với MySQL Trong quá trình biên soạn chúng tôi xin chân thành cảm ơn các đồng nghiệp khoa Công nghệ thông tin, cùng các đồng nghiệp trong trƣờng Đại học Sƣ phạm Kỹ thuật Nam Định đã giúp chúng tôi hoàn thành tập bài giảng này. Trong lần biên soạn đầu tiên, tập bài giảng không tránh khỏi những sai sót, rất mong nhận đƣợc các ý kiến đóng góp của các đồng nghiệp và các bạn đọc nhằm giúp cho chất lƣợng của tập bài giảng đƣợc hoàn thiện hơn. Mọi sự đóng góp ý kiến xin gửi về Văn phòng Khoa Công nghệ thông tin, trƣờng Đại học Sƣ phạm kỹ thuật Nam Định. Chúng tôi xin chân thành cảm ơn! Nam Định, tháng 12 năm 2014 Nhóm biên soạn Th.s Nguyễn Văn Trung Th.s Trần Đình Tùng Th.s Phan Đức Thiện i
  2. MỤC LỤC LỜI NÓI ĐẦU i CHƢƠNG 1: TỔNG QUAN VỀ PHP VÀ MYSQL 1 1.1. Giới thiệu về mã nguồn mở 1 1.1.1. Khái niệm phần mềm mã nguồn mở 1 1.1.2. Lợi ích của mã nguồn mở đối với ngƣời phát triển 1 1.1.3. Lợi ích của mã nguồn mở đối với ngƣời sử dụng 1 1.1.4. Một số phần mềm mã nguồn mở 2 1.2. Giới thiệu về PHP 2 1.3. Giới thiệu về MySQL 3 1.4. Cài đặt cấu hình PHP, MySQL, Apache 4 1.4.1. Cài đặt Appserv 4 1.4.2. Cài đặt Wampserver 8 1.5. Xử lý dữ liệu với phpMyAdmin 8 1.6. Bài tập 15 CHƢƠNG 2: LẬP TRÌNH VỚI PHP 16 2.1. Cấu trúc của PHP 16 2.1.1. Câu lệnh trong PHP 16 2.1.2. Chú thích trong PHP 19 2.1.3. In kết quả trong PHP 20 2.2. Các kiểu dữ liệu trong PHP 22 2.2.1. Các kiểu dữ liệu trong PHP 22 2.2.2. Kiểm tra kiểu dữ liệu 22 2.2.3. Thay đổi kiểu dữ liệu biến 23 2.2.4. Kiểu số nguyên 24 2.2.5. Kiểu dấu chấm động 25 2.2.6. Kiểu chuỗi String 26 2.2.7. Kiểu boolean 26 2.2.8. Kiểu mảng 27 2.2.10. Kiểu đối tƣợng 30 2.2.11. Giá trị Null 30 2.3. Khái niệm biến, hằng và chuỗi 30 2.3.1. Biến trong PHP 30 2.3.2. Hằng 33 2.3.3. Chuỗi 35 2.4. Toán tử và biểu thức 35 ii
  3. 2.4.1. Biểu thức 35 2.4.2. Toán tử gán 35 2.4.3. Toán tử số học 36 2.4.4. Toán tử so sánh 36 2.4.5. Toán tử logic 36 2.4.6. Toán tử kết hợp 37 2.4.7. Độ ƣu tiên các phép toán 37 2.5. Mảng 38 2.5.1. Mảng một chiều 38 2.5.2. Mảng hai chiều 40 2.5.3. Các hàm xử lý mảng 43 2.6. Các hàm xử lí chuỗi 48 2.6.1 Quy tắc trong chuỗi 48 2.6.2. Định dạng chuỗi 49 2.6.3. Hàm chuyển đổi chuỗi 50 2.6.4. Hàm tách và kết hợp chuỗi 51 2.6.5. Tìm kiếm và thay thế chuỗi 53 2.6.6. Các hàm xử lý chuỗi hay sử dụng 58 2.7. Hàm và sử dụng hàm 62 2.8. Sử dụng include và Require 65 2.8.1. Sử dụng Include 66 2.8.2. Sử dụng Require 66 2.8.3. Sự khác nhau giữa Include và Require 67 2.8.4. Sử dụng Require_once và include_once 67 2.9. Câu lệnh rẽ nhánh 67 2.9.1. Câu lệnh if else 67 2.9.2. Câu lệnh switch case 69 2.10. Các cấu trúc lặp 71 2.10.1. Lệnh for 71 2.10.2. Lệnh foreach 72 2.10.3. Lệnh while 74 2.10.4. Lệnh do while 74 2.10.5. Lệnh break, continue, goto, die, exit 75 2.11. Lập trình hƣớng đối tƣợng 76 2.11.1. Khái niệm về lập trình hƣớng đối tƣợng 76 2.11.2. Lớp, thuộc tính, phƣơng thức của đối tƣợng 77 2.11.4. Tính kế thừa 83 iii
  4. 2.11.5. Các mức truy cập private protected và public 88 2.11.7. Cách sử dụng private, protected và public 94 2.11.9 Tính đóng gói trong lập trình hƣớng đối 100 2.11.10 Hàm khởi tạo và hàm hủy 100 2.11.11 Lớp trừu tƣợng (Abstract) 104 2.11.12. Interface 107 2.11.13. Thuộc tính và phƣơng thức tĩnh 109 2.12. Truyền và xử lý dữ liệu trong PHP 113 2.12.1. Truyền và xử lý dữ liệu trong PHP 113 2.12.2. Truyền và xử lý dữ liệu qua URL 114 2.12.3. Truyền và xử lý dữ liệu qua Form 118 2.13. Các đối tƣợng cơ bản trong PHP 119 2.13.1. Đối tƣợng Session 119 2.13.2. Đối tƣợng Cookies 128 2.13.3. Đối tƣợng Server 132 10.14. Các hàm xử lý file trong php 133 2.14. Bài tập 140 CHƢƠNG 3: SỬ DỤNG PHP VỚI MYSQL 158 3.1. Cấu trúc và cú pháp của MySQL 158 3.1.1. Các kiểu dữ liệu MySQL 158 3.1.2. NULL/NOT NULL 161 3.1.3. INDEXES 161 3.1.4. UNIQUE 161 3.1.5. Tăng tự động (auto Increment) 161 3.1.6. Các kiểu bảng của MySQL và kỹ thuật lƣu trữ 161 3.1.7. Lệnh và cú pháp trong MySQL 163 3.1.8. Các hàm cơ bản trong MySQL 181 3.2. Làm việc với MySQL và PHP 183 3.2.1. Các hàm cơ bản làm việc giữa PHP và MySQL 183 3.2.2. Kết nối MySQL Server 190 3.2.3. Các thao tác với cơ sở dữ liệu 191 3.2.4. Truy vấn cơ sở dữ liệu 197 3.3. Xây dựng một số trang web kết hợp PHP và MySQL 206 3.3.1. Xây dựng trang đăng nhập 206 3.3.2. Xây dựng trang thêm thành viên 209 3.3.3. Xây dựng trang quản lý thành viên 213 3.3.4. Xây dựng trang xoá sửa thành viên 216 iv
  5. 3.3.5. Xây dựng trang tạo mã xác nhận 221 3.3.6. Xây dựng trang đếm số ngƣời online 224 3.3.7. Xây dựng trang bình chọn 227 3.3.8. Xây dựng trang upload nhiều file 232 3.4. Bài tập 238 TÀI LIỆU THAO KHẢO 256 v
  6. DANH MỤC CÁC HÌNH VẼ Hình 1.1. Cửa số Welcome khi cài AppServ 4 Hình 1.2. Thông tin giấy phép sử dụng phần mềm 5 Hình 1.3. Chọn thƣ mục để cài đặt 5 Hình 1.4. Chọn các thành phần cần cài đặt 5 Hình 1.5. Thông tin về ngƣời quản lý và port truy cập webserver 6 Hình 1.6. Nhập mật khẩu cho tài khoản root 6 Hình 1.7. Quá trình cài đặt AppServ 6 Hình 1.8. Trang chủ của AppServ 7 Hình 1.9. Đăng nhập vào phpMyAdmin 7 Hình 1.10. Tạo cơ sở dữ liệu tintuc 9 Hình 1.11. Tạo bảng dữ liệu 9 Hình 1.12. Tạo các trƣờng dữ liệu cho bảng 10 Hình 1.13. Nhập dữ liệu cho bảng 10 Hình 1.14. Xem dữ liệu của bảng 11 Hình 1.15. Xoá và sửa dữ liệu của bảng 11 Hình 1.16. Sửa cấu trúc bảng 12 Hình 1.17. Đổi tên bảng dữ liệu 12 Hình 1.18. Xoá bảng dữ liệu 13 Hình 1.19. Import dữ liệu từ file sql 13 Hình 1.20. Export dữ liệu từ file sql 14 Hình 1.21. Xoá cơ sở dữ liệu 15 Hình 2.1. Quá trình thông dịch trang PHP 16 Hình 2.2. Kết quả thực hiện trang hello.php 17 Hình 2.3. Kết quả thực hiện trang script.php 18 Hình 2.4. Kết quả thực hiện trang echo.php 22 Hình 2.5. Kết quả khi triệu gọi trang arrayone.php. 40 Hình 2.6. Kết quả thực hiện arraytwo.php 42 Hình 2.7. Kết quả thực hiện trang mang.php 43 Hình 2.8. Kết quản thực hiện sắp xếp mảng 43 Hình 2.9. Định dạng chuỗi in 49 Hình 2.10. Chuyển đổi chuỗi 51 Hình 2.11. Kết quả sử dụng hàm tách chuỗi 52 Hình 2.12. Kết quả sử dụng hàm kết hợp chuỗi 53 Hình 2.13. Kết quả sử dụng hàm thay thế chuỗi 54 Hình 2.14. Hoạt động của Include 66 vi
  7. Hình 2.15. Trừu tƣợng hoá dữ liệu 81 Hình 2.16. Các đối tƣợng trong trong thế giới thực 82 Hình 2.17. Kết quả chạy file movie1.php 116 Hình 2.18. Lấy dữ liệu truyền theo url 116 Hình 2.19. Lấy dữ liệu bằng $_request 117 Hình 2.20. Kết quả thực hiện 117 Hình 2.21. Nhận dạng Session 120 Hình 2.22. Đăng ký Session 121 Hình 2.23. Lấy giá trị của session 122 Hình 2.24. Lỗi phát sinh truy cập session chƣa tồn tại 123 Hình 2.25. Không có lỗi phát sinh gọi trang checksession.php 124 Hình 2.26. Loại bỏ session 125 Hình 2.27. Huỷ session 126 Hình 2.28. Đăng ký cookie 130 Hình 2.29. Dùng $HTTP_COOKIE_VARS 131 Hình 3.1. Thêm bản ghi 192 Hình 3.2. Thực thi trang cập nhật dữ liệu 195 Hình 3.3. Thực thi xoá một bản ghi 197 Hình 3.4. Liệt kê bản ghi 198 Hình 3.5. Liệt kê danh sách lại sản phẩm 199 Hình 3.6. Liệt kê danh sách loại sách 202 Hình 3.7. Liệt kê danh sách sản phẩm duyệt hay chƣa 205 Hình 3.8. Giao diện trang đăng nhập 206 Hình 3.9. Giao diện trang thêm thành viên 210 Hình 3.10. Giao diện trang sửa thanh viên 217 Hình 3.11. Giao diện trang tạo mã xác nhận 222 Hình 3.12. Giao diện trang bình chọn 229 Hình 3.13. Giao diện trang kết quả bình chọn 232 Hình 3.14. Giao diện trang Upload file 234 vii
  8. CHƢƠNG 1: TỔNG QUAN VỀ PHP VÀ MYSQL 1.1. Giới thiệu về mã nguồn mở 1.1.1. Khái niệm phần mềm mã nguồn mở Open Source: Mã nguồn mở. Open Source Software: Phần mềm mã nguồn mở. Free Software: Phần mềm miễn phí, đôi khi free software đƣợc dùng với ý nghĩa bao gồm cả open source software và free software. Phần mềm nguồn mở (PMNM) là những phần mềm đƣợc cung cấp dƣới cả dạng mã và nguồn, không chỉ là miễn phí về giá mua mà chủ yếu là miễn phí về bản quyền: ngƣời dùng có quyền sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung qui định trong giấy phép PMNM (ví dụ General Public Licence – GPL) mà không cần xin phép ai, điều mà họ không đƣợc phép làm đối với các phần mềm nguồn đóng (tức là phần mềm thƣơng mại). Nhà cung cấp phần mềm nguồn mở có quyền yêu cầu ngƣời dùng trả một số chi phí về các dịch vụ bảo hành, huấn luyện, nâng cấp, tƣ vấn, vv tức là những dịch vụ thực sự đã thực hiện để phục vụ ngƣời dùng, nhƣng không đƣợc bán các sản phẩm nguồn mở vì nó là tài sản của trí tuệ chung, không phải là tài sản riêng của một nhà cung cấp nào. Tiện ích mà Open Source mang lại chính là quyền tự do sử dụng chƣơng trình cho mọi mục đích, quyền tự do để nghiên cứu cấu trúc của chƣơng trình, chỉnh sữa phù hợp với nhu cầu, truy cập vào mã nguồn, quyền tự do phân phối lại các phiên bản cho nhiều ngƣời, quyền tự do cải tiến chƣơng trình và phát hành những bản cải tiến vì mục đích công cộng. 1.1.2. Lợi ích của mã nguồn mở đối với ngƣời phát triển Đối với lập trình viên và ngƣời sản xuất phần mềm, sự tự do đáng kể sẽ thay đổi các qui định của cuộc chơi. Nó làm cho dễ dàng hơn để tiếp tục cạnh tranh trong khi vẫn là nhỏ và để có đƣợc công nghệ hiện đại. Nó cho phép chúng ta tận dụng đƣợc ƣu thế công việc của những ngƣời khác, cạnh tranh ngay cả với sản phẩm khác bằng việc sửa đổi mã nguồn của riêng mình, dù đối thủ cạnh tranh sao chụp đƣợc có thể sau đó cũng tận dụng đƣợc ƣu thế về mã nguồn của chúng ta (nếu nó là copyleft). Nếu dự án đƣợc quản lý tốt, thì có khả năng có đƣợc sự hợp tác tự do của một số lƣợng ngƣời lớn, hơn nữa, để có đƣợc sự truy cập tới một hệ thống phân phối gần nhƣ hoàn toàn tự do và toàn cầu. Dẫu rằng, vấn đề còn lại là làm thế nào để có đƣợc những tài nguyên về tài chính, nếu phần mềm không phải là sản phẩm để bán vì tiền hoa hồng. 1.1.3. Lợi ích của mã nguồn mở đối với ngƣời sử dụng Lợi ích lớn nhất trong việc chuyển đổi sang phần mềm tự do nguồn mở là giảm tổng chi phí sở hữu, từ các yếu tố sau: - Miễn phí bản quyền phần mềm 1
  9. - Miễn phí các phiên bản nâng cấp trong toàn bộ vòng đời sử dụng sản phẩm - Giảm chi phí phát triển phần mềm đáp ứng theo yêu cầu nghiệp vụ (sử dụng phần mềm, mô-đun có sẵn để phát triển tiếp, sửa đổi điều chỉnh cho phù hợp với nghiệp vụ) - Kéo dài thời gian sử dụng/tái sử dụng các phần cứng, thiết bị trong khi vẫn đảm bảo hiệu năng toàn hệ thống - Chi phí đầu tƣ, vận hành hệ thống tập trung cho các dịch vụ “hữu hình” đem lại giá trị trực tiếp, thiết thực cho tổ chức nhƣ: tƣ vấn, sửa đổi theo yêu cầu, triển khai, đào tạo, bảo trì, nâng cấp hệ thống - Mức chi phí tiết kiệm khoảng 75-80% so với phần mềm license ngay trong năm đầu tiên. Giảm tối đa sự phụ thuộc vào một vài nhà cung cấp phần mềm dẫn đến dịch vụ kém (do không có cạnh tranh), hoặc “bị ép” trong các trƣờng hợp cần đàm phán về chi phí, dịch vụ (mỗi FLOSS có thể có nhiều nhà cung cấp dịch vụ tƣơng tự), nâng cấp phần mềm, mở rộng hệ thống (với mã nguồn trong tay, có thể dễ dàng nâng cấp, mở rộng hệ thống theo yêu cầu trong mỗi giai đoạn phát triển). Đối với các hệ thống đang hoạt động, chủ động thực hiện chuyển đổi sẽ tránh đƣợc “nguy cơ” bị phạt vi phạm bản quyền và/hoặc bị “bắt buộc” mua license. Tăng tính thƣơng hiệu cho doanh nghiệp khi giới thiệu đƣợc với cộng đồng, đối tác, khách hàng (đặc biệt là ngoài nƣớc) và không vi phạm bản quyền. Tăng cƣờng độ tin cậy, ổn định, tính an toàn, bảo mật (theo báo cáo của Gartner & nhiều tổ chức phân tích độc lập) toàn hệ thống. 1.1.4. Một số phần mềm mã nguồn mở OpenOffice: Bộ công cụ phần mềm văn phòng mã nguồn mở, miễn phí và tƣơng thích với các định dạng tài liệu của Microsoft Office. UniKey: Công cụ hỗ trợ gõ tiếng Việt trên môi trƣờng Windows, miễn phí và hiệu quả. Hỗ trợ nhiều bảng mã tiếng Việt và nhiều kiểu gõ tiếng Việt khác nhau. Tích hợp công cụ chuyển đổi giữa các bảng mã tiếng Việt với nhau. Mozilla Firefox: Trình duyệt web mã nguồn mở phổ biến và tốt nhất hiện nay. Hệ điều hành của Linux dành cho máy bàn (PC) và máy tính xách tay (Laptop, Netbook ): Ubuntu, Fedora, Hacao, Redhat, CentOS, Cổng thông tin điện tử: Liferay, Uportal, DotnetNuke, ExoPlatform, DotnetNuke, Joomla, Moodle Diễn đàn: phpBB, Jforum, mvnForum, SMF 1.2. Giới thiệu về PHP PHP viết tắt của chữ Personal Home Page ra đời năm 1994 do phát minh của Rasmus Lerdorf, và nó tiếp tục đƣợc phát triển bởi nhiều cá nhân và tập thể khác, do 2
  10. đó PHP đƣợc xem nhƣ một sản phẩm mã nguồn mở. PHP là kịch bản trình chủ (server script) chạy trên phía server (server side) nhƣ các server script khác (asp, jsp, cold fusion). PHP là kịch bản cho phép xây dựng ứng dụng web trên mạng internet hay intranet tƣơng tác với mọi cơ sở dữ liệu nhƣ mySQL, Oracle, SQL Server và Access. Lƣu ý: Từ phiên bản 4.0 trở về sau mới hỗ trợ session, ngoài ra PHP xử lý chuỗi rất mạnh, vì vậy có thể sử dụng PHP trong những có yêu cầu về xử lý chuỗi. 1.3. Giới thiệu về MySQL MySQL, cơ sở dữ liệu SQL mã nguồn mở thông dụng nhất , đƣợc cung cấp bởi MySQL AB. MySQL AB là một công ty thƣơng mại thực hiện việc tạo ra các dịch vụ cung cấp cho doanh nghiệp đó xung quanh cơ sở dữ liệu MySQL. MySQL là một hệ quản trị cơ sở dữ liệu (CSDL): Một CSDL là một tập hợp cấu trúc của dữ liệu. Nó có thể là bất kỳ một cái gì từ một danh sách bán hàng đơn giản cho tới gallery ảnh hoặc số lƣợng lớn các thông tin trong một mạng doanh nghiệp. Để thêm, truy nhập và xử lý dữ liệu đƣợc lƣu trữ trong một CSDL máy tính, ta cần một hệ quản trị CSDL nhƣ MySQL. Từ khi các máy tính thực hiện tốt việc xử lý lƣợng lớn dữ liệu, quản trị CSDL đóng một vai trò chính yếu trong việc tính toán, nhƣ là các công cụ đơn lẻ, hoặc một phần của các ứng dụng khác. MySQL là một hệ quản trị CSDL quan hệ: Một CSDL quan hệ lƣu trữ dữ liệu trong trong một số bảng chuyên biệt tốt hơn là việc đặt toàn bộ dữ liệu trong một nơi lƣu trữlớn. Điều này làm tăng thêm tốc độ và sự linh hoạt. Các bảng đƣợc liên kết với nhau bằng cách định nghĩa các quan hệ tạo cho nó khả năng kết nối dữ liệu từ một vài bảng khác nhau theo yêu cầu. SQL là một phần của MySQL trong “Structured Query Language”- ngôn ngữ chuẩn thông dụng nhất đƣợc dùng để truy nhập các CSDL. MySQL là một phần mềm mã nguồn mở: Mã nguồn mở có nghĩa là nó có thể đƣợc sử dụng bởi bất kỳ ai cho mục đích sử dụng hoặc thay đổi nào. Bất kỳ ai cũng có thể download MySQL từ internet và sử dụng nó mà không phải trả bất kỳ một thứ gì. Bất kỳ ai có ý thích cũng có thể nghiên cứu mã nguồn và thay đổi chúng theo yêu cầu của riêng mình. MySQL dùng GPL (GNU General Public License) để định ra ta có thể đƣợc làm gì và không đƣợc làm gì với phần mềm trong các hoàn cảnh khác nhau. Nếu ta cảm thấy khó chịu với GPL hoặc muốn nhúng MySQL trong một ứng dụng thƣơng mại thì ta có thể mua một bản quyền thƣơng mại từ các nhà cung cấp. Lý do dùng MySQL: MySQL nhanh, đáng tin cậy và dễ dàng để sử dụng. MySQL cũng có một tập các đặc điểm rất thiết thực đƣợc phát triển trong một sự hợp tác rất chặt chẽ với ngƣời sử dụng. Có thể đem so sánh giữa MySQL và một số hệ quản trị CSDL khác trong trang web chấm điểm của nhà cung cấp. MySQL đã đƣợc phát triển một cách sáng tạo để nắm bắt các CSDL rất lớn và nhanh hơn rất nhiều các giải pháp hiện tại và đã thành công trong việc đƣợc sử dụng 3
  11. trong các môi trƣờng sản xuất đòi hỏi cao trong vài năm. Thông qua quá trình phát triển không ngừng, ngày nay, MySQL cung cấp một tập các hàm rất hữu ích và dồi dào. Sự kết nối, tốc độ và sự bảo mật đã làm cho MySQL trở nên thích ứng cao cho việc truy cập các CSDL trên internet. Các đặc điểm về mặt kỹ thuật của MySQL: MySQL là một hệ thống client/server bao gồm một SQL server đa luồng cho phép hỗ trợ nhiều thiết bị đầu cuối khác nhau, một vài chƣơng trình client khác nhau và các thƣ viện, các công cụ quản trị và một vài giao diện lập trình. Các nhà cung cấp cũng cung cấp MySQL nhƣ là một thƣ viện đa luồng mà ta có thể kết nối trong ứng dụng của ta để đạt tới một sản phẩm nhỏ hơn, nhanh hơn, dễ dàng quản lý hơn. MySQL có nhiều các phần mềm đƣợc phân phối có sẵn. Điều này thật sự thuận tiện cho ta trong việc tìm ứng dụng yêu thích của ta hoặc ngôn ngữ hỗ trợ MySQL 1.4. Cài đặt cấu hình PHP, MySQL, Apache Phần mềm Appserv và Wampserver khi cài đặt là tự động cấu hình webserver và php, mysql, apache và các ứng dụng nhƣ phpmyadmin, sqllitemanager. 1.4.1. Cài đặt Appserv Tải phần mềm Appserv tại địa chỉ Chạy file cài đặt màn hình đầu tiên là. Hình 1.1. Cửa số Welcome khi cài AppServ Nhấn Next để sang bƣớc tiếp 4
  12. Hình 1.2. Thông tin giấy phép sử dụng phần mềm Nhấn Igree để đồng ý giấy phép sử dụng phần mềm Hình 1.3. Chọn thư mục để cài đặt Nhấn Browse để chọn thƣ mục cài đặt sau đó nhấn Next để tiếp tục Hình 1.4. Chọn các thành phần cần cài đặt 5
  13. Lựa chọn các thành phần cần cài đặt nhấn Next để tiếp tục Hình 1.5. Thông tin về người quản lý và port truy cập webserver Nhập tên tài khoản, địa chỉ e-mail của ngƣời quản lý; thiết lập cổng http để truy cập webserver nhấn Next để tiếp tục. Hình 1.6. Nhập mật khẩu cho tài khoản root Nhập mật khẩu để đăng nhập hệ quản trị cơ sở dữ liệu MySQL nhấn Install để tiến hành cài đặt. Hình 1.7. Quá trình cài đặt AppServ 6
  14. Khi kết thúc quá trình cài đặt tạo một Server ảo chạy web PHP. Với cài đặt mặc định. - C:\AppServ\www là địa chỉ webroot, nơi copy các file php. - C:\AppServ\mysql\data\ chứa CSDL MySQL, mỗi CSDL sẽ là mọt folder, để sao lƣu dữ liệu MySQL, đơn gian chỉ việc copy folder này thành nhiều bản sao. - Để quản trị CSDL MySQL, truy nhập địa chỉ sau từ trình duyệt: - Vào để xem thông tin đầy đủ về server vừa cài. - Thƣ mục tƣơng tự trên host public_html mặc định là C:\AppServ\www là địa chỉ webroot, nơi copy các file php. Mở trình duyệt web đánh địa chỉ Hình 1.8. Trang chủ của AppServ Nhấn vào dòng phpMyAdmin Database Manager Version 2.9.0.2 để vào quản lý, tạo database Hình 1.9. Đăng nhập vào phpMyAdmin 7
  15. 1.4.2. Cài đặt Wampserver Wampserver là một phần mềm mã nguồn mở giúp đơn giản quá trình thiết lập môi trƣờng thực thi ứng dụng PHP trên hệ điều hành Windows. Các thành phần của Wampserver bao gồm Apache, MySQL và PHP, nhƣ vậy chỉ cần cài dặt Wampserver lên máy là đã có đủ môi trƣờng để chạy các ứng dụng PHP. Bƣớc 1: Để bắt đầu cài đặt Wampserver click đúp vào file Wampserver vừa download về, sau dó chọn Next để bắt đầu quá trình cài đặt. Bƣớc 2: Nhấn chọn I accept the agreement và nhấn Next để tiếp tục Bƣớc 3: Thƣ mục cài đặc mặc định của Wampserver là C:\wamp, nếu muốn thay đổi nhấn vào nút Browse và trỏ tới thƣ mục mới sau đó nhấn Next để tiếp tục Bƣớc 4: Chọn Next ở bƣớc tiếp theo Bƣớc 5: Chọn Install để bắt đầu quá trình cài đặt Wampserver Bƣớc 6: Màn hình cài đặt Wampserver Bƣớc 7: Để thông tin mặc định cho bƣớc này và nhấn Next Bƣớc 8: Hoàn thành các bƣớc cài đặt Bƣớc 9: Đến đây là đã cài đặt thành công Wampserver. Sau khi chạy thì Wampserver sẻ hiển thị ở khay đồng hồ. Biểu tƣợng Wampserver: Màu đỏ: Wampserver chƣa hoạt động, Màu cam bị lỗi port (lỗi này có nhiều nguyên nhân nhƣng nguyên nhân chủ yếu là do lỗi xung đột port, mặc định Wampserver chạy port 80), Màu xanh: Wampserver đã chạy Để tiến hành sửa lỗi nhƣ ta làm nhƣ sau: Nếu ở bƣớc 3 không thay đổi thƣ mục cài đặt của Wampserver thì theo đƣờng dẫn sau: C:\wamp\bin\apache\Apache2.x\httpd.conf Mở file httpd.conf và chỉnh lại port : tìm kiếm với giá trị 80 đỗi thành 8080) Bƣớc 11: Restart lại Wampserver bằng cách kick chuột trái vào biểu tƣợng Wampserver ở khay đồng hồ chọn Restart All Services Sau khi Restart lại Wampserver nếu không lỗi gì thì Wampserver sẻ chuyển qua màu xanh nhƣ hình thì cài đặt thành công. 1.5. Xử lý dữ liệu với phpMyAdmin MySQL là hệ quản trị cơ sở dữ liệu rất tốt cho Web PHP và nó là miễn phí và đƣợc tích hợp trong gói đã cài đặt trƣớc: gồm PHP, cài đặt PHP, Apache, MYSQL và phpMyadmin. Bây giờ chúng ta sẽ tiến hành các thao tác tạo, thêm, xóa sửa cơ sở dữ liệu trên giao diện phpMyadmin. 1) Mở phpMyAdmin Mở trình duyệt web nào và gõ và đăng nhập. (port là cổng truy cập Webserver). 8
  16. 2) Tạo Database Bƣớc 1. Nhấn Home chọn Tab database Bƣớc 2. Trong mục Create database, khai báo. Đặt tên cho cơ sở dữ liệu Chọn utf8_general_ci (thể hiện đƣợc tiếng việt) Bƣớc 3. Nhấn Create để tạo cơ sở dữ liệu Ví dụ: Tạo database có tên là tintuc 1 3 2 Hình 1.10. Tạo cơ sở dữ liệu tintuc 3) Tạo Table Bƣớc 1. Chọn database muốn tạo bảng Bƣớc 2. Mục Name: khai báo tên table muốn tạo Bƣớc 3. Mục Number of columns: khai báo số cột trong table Bƣớc 4. Nhấn nút Go 2 3 1 4 Hình 1.11. Tạo bảng dữ liệu Bƣớc 5. Khai báo các các cột trong table Bƣớc 6. Nhấn nút Save 9
  17. 5 6 Hình 1.12. Tạo các trường dữ liệu cho bảng 4) Thêm dữ liệu vào Table Bƣớc 1. Chọn table Bƣớc 2. Nhấn link Insert Bƣớc 3. Nhập dữ liệu Bƣớc 4. Nhấn nút Go Ví dụ: Thêm 2 record vào table theloai nhƣ sau: TenTL ThuTu AnHien Tin xã hội 1 1 Giải trí 2 2 2 1 3 4 Hình 1.13. Nhập dữ liệu cho bảng 10
  18. 5) Xem dữ liệu trong Table Bƣớc 1. Chọn table muốn xem dữ liệu Bƣớc 2. Nhấn link Browse. Mỗi lần hiện 25 records Ví dụ: Xem dữ liệu trong table theloai. 2 1 Hình 1.14. Xem dữ liệu của bảng 6) Xóa/Sửa dữ liệu trong Table Bƣớc 1. Chọn table muốn xóa sửa (ví dụ theloai). Bƣớc 2. Nhấn link Browse. Bƣớc 3. Hiệu chỉnh/xóa. Sửa record: Nhấn nút Edit (chiếc bút chì) trên dòng chứa record. Xóa record : Nhấn nút Delete trên dòng chứa record. 2 1 3 Hình 1.15. Xoá và sửa dữ liệu của bảng 11
  19. 7) Sửa cấu trúc Table Bƣớc 1. Chọn table Bƣớc 2. Nhấn link Structure Bƣớc 3. Chỉnh field: Nhấn nút Change Xóa field : Nhấn nút Drop Thêm cột : Nhấn nút Go trong mục Add Hình 1.16. Sửa cấu trúc bảng 8) Đổi tên Table Bƣớc 1. Chọn table cần đổi tên Bƣớc 2. Nhấn link Operations Bƣớc 3. Rename table to: gõ tên mới Bƣớc 4. Nhấn nút Go Ví dụ: Đổi tên table theloai thành theloaitin 2 13 1 4 Hình 1.17. Đổi tên bảng dữ liệu 9) Xóa Table Bƣớc 1. Chọn cơ sở dữ liệu 12
  20. Bƣớc 2. Chọn bảng cấn xóa và nhấn link Drop Ví dụ: Xóa table theloaitin 2 1 Hình 1.18. Xoá bảng dữ liệu 10) Import Table Bƣớc 1. Chọn database Bƣớc 2. Nhấn link Import Bƣớc 3. Nhấn nút Browse để chọn file .sql Bƣớc 4. Nhấn nút Go Ví dụ: Import dữ liệu từ file db1.sql 2 1 3 4 Hình 1.19. Import dữ liệu từ file sql 13
  21. 11) Export Table Bƣớc 1. Chọn database cần export Bƣớc 2. Nhấn link Export Bƣớc 3. Export: chọn các table cần export Bƣớc 4. Chọn Save output to a file Bƣớc 5. Chọn kiểu file là SQL và nhấn nút Save Ví dụ: Export tất cả các table trong database tintuc ra file dbtin.sql 2 1 3 4 5 Hình 1.20. Export dữ liệu từ file sql 12) Xoá Database Bƣớc 1. Nhấn tên database Bƣớc 2. Nhấn link Drop Ví dụ: Xóa database tintuc 14
  22. 1 2 3 Hình 1.21. Xoá cơ sở dữ liệu 1.6. Bài tập 1. Cài đặt và cấu hình Webserver bằng phần mềm Appserv. 2. Cài đặt và cấu hình Webserver bằng phần mềm Wampserver. 3. Sử dụng phpmyAdmin để tạo cơ sở dữ liệu 15
  23. CHƢƠNG 2: LẬP TRÌNH VỚI PHP 2.1. Cấu trúc của PHP 2.1.1. Câu lệnh trong PHP PHP là kịch bản trình chủ (Server Script) đƣợc chạy trên nền PHP Engine, cùng với ứng dụng Web Server để quản lý chúng. Web Server thƣờng sử dụng là IIS, Apache Web Server, Thông dịch trang PHP Khi ngƣời sử dụng gọi trang PHP, Web Server triệu gọi PHP Engine để thông dịch trang PHP và trả về kết quả cho ngƣời sử dụng nhƣ hình sau: Hình 2.1. Quá trình thông dịch trang PHP Dùng một chƣơng trình soạn thảo văn bản nhƣ notepad hoặc các phần mềm hỗ trợ soạn thảo PHP Design, EditPlus, Dreamweaver, notepad++, Netbean, zendstudio . Đặt tên cho các tập tin là *.php. Đối với PHP cho phép xen kẽ giữa lệnh HTML và lệnh PHP. Do đó, PHP đƣợc xem nhƣ là một script giống nhƣ Javascript hay Vbscript. Các lệnh của PHP sử dụng cú pháp nhƣ sau: Cách 1 : Cú pháp chính: Cách 2: Cú pháp ngắn gọn Cách 3: Cú pháp giống với ASP. 16
  24. Cách 4: Cú pháp bắt đầu bằng script Trong PHP để kết thúc một dòng lệnh ta sử dụng dấu ";" Ví dụ: 1-Giá trị biến Str: 2-Giá trị biến i: 3-Giá trị cũ thể: Chẳng hạn khai báo trang hello.php với nội dung nhƣ ví dụ sau: Ví dụ: Trang hello.php ::Welcome to PHP Greeting: Kết quả trả về nhƣ hình khi triệu gọi trang này trên trình duyệt. Hình 2.2. Kết quả thực hiện trang hello.php Ví dụ: 17
  25. Ví dụ: Trang script.php ::Welcome to PHP Giá trị của paging: Kết quả trả về khi triệu gọi trang này trên trình duyệt. Hình 2.3. Kết quả thực hiện trang script.php Nếu muốn sử dụng script hay scriptlet nhƣ ASP thì cần khai báo trong tập tin php.ini nhƣ sau: asp_tags = On ; Allow ASP-style tags. mặc định là Off Khi đó trong trang PHP, thay vì khai báo nhƣ sau: 18
  26. Thì ta có thể khai báo: Để lập trình bằng ngôn ngữ PHP cần chú ý những điểm sau: Cuối câu lệnh có dấu ; Biến trong PHP có tiền tố là $ Mỗi phương thức đều bắt đầu { và đóng bằng dấu } Khi khai báo biến thì không có kiễu dữ liệu Nên có giá trị khởi đầu cho biến khai báo Phải có chi chú (comment) cho mỗi feature mới Sử dụng dấu // hoặc # để giải thích cho mỗi câu ghi chú Sử dụng /* và */ cho mỗi đoạn ghi chú Khai báo biến có phân biệt chữ hoa hay thường 2.1.2. Chú thích trong PHP Để ghi chú một dòng thì ta sử dụng cặp dấu // Trong trƣờng hợp có nhiều dòng cần ghi chú sử dụng cặp dấu /* và */, ví dụ khai báo ghi chú nhƣ sau: /* Khai báo biến để đọc dữ liệu trong đó totalRows là biến trả về tổng số bản ghi */ $result = mysql_query($stSQL, $link); $totalRows=mysql_num_rows($result); Ngoài ra, cũng có thể sử dụng dấu # để khai báo ghi chú cho từng dòng Ví dụ: 19
  27. 2.1.3. In kết quả trong PHP Khác với các kịch bản nhƣ ASP, JSP, Perl, đối với PHP để in ra giá trị từ biến, biểu thức, hàm, giá trị cụ thể thì ta có thể sử dụng script nhƣ sau: Giá trị của paging: 1) Sử dụng Echo echo là một cấu trúc ngôn ngữ, nó cho phép sử dụng có dấu hoặc không dấu ngoặc đơn: echo or echo(). Ví dụ dƣới đây sẽ cho thấy làm thế nào để hiển thị các chuỗi khác nhau với lệnh echo (các chuỗi cũng có thể chữa mã HTML) Học PHP thật thú vị "; echo "Xin chào PHP"; echo ("Tôi đang học PHP "); echo "táo", "cam", "mít", "na", "nhãn"; ?> Ví dụ dƣới đây cho thấy cách hiển thị chuỗi và biến với echo. "; echo "Học PHP ở {$txt2}"; echo "Chiếc xe hãng {$cars[0]}"; ?> 2) Sử dụng hàm print() print là một hàm, nó cho phép sử dụng có dấu hoặc không dấu ngoặc đơn: print hoặc print() Ví dụ dƣới đây sẽ cho thấy làm thế nào để hiển thị các chuỗi khác nhau với lệnh print (các chuỗi cũng có thể chữa mã HTML) 20
  28. PHP thật tuyệ vời "; print("Xin chào PHP"); print("Tôi đang học PHP"); ?> Ví dụ dƣới đây cho thấy cách hiển thị chuỗi và biến với print "; print "Học PHP ở {$txt2}"; print "Chiếc xe hãng {$cars[0]}"; ?> Ví dụ: Trang echo.php ::Welcome to PHP Kết quả trả về nhƣ hình sau khi triệu gọi trang này trên trình duyệt. 21
  29. Hình 2.4. Kết quả thực hiện trang echo.php 2.2. Các kiểu dữ liệu trong PHP 2.2.1. Các kiểu dữ liệu trong PHP Các kiểu dữ liệu khác nhau chiếm các lƣợng bộ nhớ khác nhau và có thể đƣợc xử lý theo cách khác nhau khi chúng đƣợc thao tác trong một script. Trong PHP có 6 kiểu dữ liệu chính nhƣ bảng sau : Kiểu dữ liệu Ví dụ Mô tả Interger 10 Một số nguyên Double 5.208 Kiểu số thực String “How are you?” Một tập các kí tự Boolean True or False Giá trị true hoặc false Object Hƣớng đối tƣợng trong PHP Array Mảng trong PHP, chứa các phần tử Ta có thể sử dụng hàm dựng sẵn gettype() để kiểm tra kiểu của biến. Ví dụ: 2.2.2. Kiểm tra kiểu dữ liệu Để kiểm tra kiểu dữ liệu của biến, ta sử dụng các hàm nhƣ sau: is_int(): Để kiểm tra biến có kiểu integer, nếu biến có kiểu integer thì hàm sẽ trả về giá trị là true (1). Tƣơng tự, ta có thể sử dụng các hàm kiểm tra tƣơng ứng với kiểu dữ liệu là is_array(), is_bool(), is_callable(), is_double(), is_float(), is_int(), is_integer(), is_long(), is_null(), is_numeric(), is_object(), is_real, is_string(). Chẳng hạn, khai báo các hàm này nhƣ ví dụ sau: 22
  30. Ví dụ: ::Welcome to PHP Check DataType of Variable "; echo is_bool($record); ?> 2.2.3. Thay đổi kiểu dữ liệu biến Khi khai báo biến và khởi tạo giá trị cho biến với kiểu dữ liệu, sau đó nếu muốn sử dụng giá trị của biến đó thành tên biến và có giá trị chính là giá trị của biến trƣớc đó thì sử dụng cặp dấu $$. Ví dụ, biến $var có giá trị là "total", sau đó muốn sử dụng biến là total thì khai báo nhƣ ví dụ sau. Ví dụ: ::Welcome to PHP Change DataType of Variable <?php $var="total"; 23
  31. echo $var; echo " "; $$var=10; echo $total; ?> 2.2.4. Kiểu số nguyên Chữ INT là viết tắt của chữ INTEGER, là một kiểu dữ liệu dạng số và có thể ở viết ở nhiều cơ số khác nhau. Kiểu số INT không dùng dấu nháy để bao quanh nó, kích thƣớc của kiểu INT là 32 bit. Trong PHP không hỗ trợ nhiều kiểu Unsigned Integer (số nguyên dƣơng) nên nếu ta sử dụng vƣợt quá giới hạn của nó thì mặc nhiên trình biên dịch sẽ hiểu đây là kiểu Float (số thực), tuy nhiên không phải lúc nào điều này cũng đúng cho trƣờng hợp số dƣơng. Khai báo biến kiểu INT Để khai báo một biến kiểu INT, gán giá trị cho nó là số nguyên (kể cả số âm). Ép dữ liệu sang kiểu INT Cú pháp: (int)$ten_bien; Việc chuyển đổi này trong PHP đôi khi lại không cần thiết vì các kiểu dữ liệu trong php tự động chuyển các biến sang các kiểu thích hợp để thực hiện phép tính, tuy nhiên sau khi thực hiện tính toán thì biến đó sẽ tự chuyển lại kiểu dữ liệu ban đầu. <?php $a = '123'; // Biến $a là kiểu chuỗi có giá trị bằng '123' $b = 123; // Biến $b là kiểu INT có giá trị bằng 123 24
  32. $c = $a + $b; // Biến C là kết quả của phép toán $a + $b và sẽ có giá trị là 246 nên nó là kiểu INT var_dump(is_int($c)); // hàm is_int($tenbien) dùng để kiểm tra một biến có phải là kiểu INT hay không var_dump(is_int($a)); // kết quả là false vì biến $a là kiểu string ?> Trong ví dụ này ta thấy biến $a là chuỗi còn biến $b là số, khi ta cộng 2 biến lại thì các biến sẽ tự động chuyển sang kiểu số INT thích hợp để cộng, và kết quả là kiểu INT gán vào biến $c. Để kiểm tra ta dùng dòng lệnh var_dump(is_int($c)); để xuất ra màn hình kết quả kiểm tra. Chạy đoạn lệnh này ta thấy kết quả ra số 0. Tại sao? vì biến $a có ký tự đầu tiên không phải ở dạng số nên nó sẽ tự động cắt bỏ tất cả những ký tự đằng sau ký tự a nên chuỗi này rỗng, mà giá trị rỗng chuyển sang kiểu INT có giá trị bằng không. Kết quả đoạn mã trên xuất ra màn hình là 123, nó sẽ xóa các ký tự bắt đầu từ ký tự a nên chuỗi sẽ còn ‟123′, chuyển sang kiểu INT thành 123. Kiểm tra dữ liệu có phải kiểu INT. Để kiểm tra một biến nào đó có phải kiểu INT không chúng ta dùng 2 hàm is_int($bien) hoặc is_integer($bien). kết quả trả về giá trị True nếu là kiểu INT và False nếu không phải kiểu INT. 2.2.5. Kiểu dấu chấm động Hiểu một cách nôm na kiểu số thực là những số có phần dƣ, còn kiểu INT là những số không dƣ phần nào, nhƣ số 1.234 là kiểu số thực, 1234 là kiểu số nguyên (INT). Kích cỡ của nó phụ thuộc xác định phụ thuộc vào từng platform nhƣng giá trị lớn nhất xấp xỉ 1.8e308, các kiểu dữ liệu trong php của kiểu số thực gồm có kiểu float, double. 25
  33. Ép dữ liệu sang kiểu số thức. Dùng (float), (double) để chuyển kiểu dữ liệu sang số thực cho một biến Kiểm tra một biến kiểu số thực. Để kiểm tra một biến phải kiểu số thực không chúng ta dùng hàm is_float($bien) để kiểm tra cho kiểu float, is_double($bien) để kiểm tra cho kiểu double. Kết quả hai hàm này trả về TRUE nếu đúng, FALSE nếu sai. 2.2.6. Kiểu chuỗi String Các kiểu dữ liệu trong php thì kiểu chuỗi mình gồm kiểu string (chuỗi) và char (ký tự), mỗi ký tự là 1 byte và là một trong 256 ký tự khác nhau, để khai báo báo ta chỉ việc khai báo một biến và gán giá trị chuỗi cho nó, chuỗi phải đƣợc bao quanh bằng dấu nháy đơn „hoặc dấu nháy kép “. Ép kiểu cũng nhƣ trên ta dùng (string) để chuyển sang kiểu chuỗi. 2.2.7. Kiểu boolean Đây là một kiểu dữ liệu đơn giản nhất trong các kiểu dữ liệu trong PHP, nó chỉ chứa 2 giá trị là đúng hoặc sai (TRUE hoặc FALSE). Để tạo biến kiểu boolean thì ta gán giá trị cho nó là TRUE hoặc FALSE. Lƣu ý TRUE, FALSE không phân biệt hoa thƣờng. Ép dữ liệu sang kiểu boolean. Tƣơng tự nhƣ kiểu INT ta sử dụng (bool) hoặc (boolean) để ép kiểu sang kiểu bool. Nhƣ vậy trong PHP thì bool và boolean là 2 từ khóa có cùng một ý nghĩa. 26
  34. Các ký tự 0, ký tự trống và null đều đƣợc quy về giá trị FALSE, các ký tự còn lại quy về TRUE. Việc chuyển đổi này đôi khi cũng không cần thiết vì php tự xem xét giá trị và quy về TRUE hay FALSE. Kiểm tra một biến kiểu boolean Để kiểm tra một biến có phải kiểu boolean ta dùng hàm is_bool($bien); để kiểm tra, kết quả của hàm này trả về TRUE nếu là kiểu bool, ngƣợc lại là false nếu không phải kiểu bool. 2.2.8. Kiểu mảng Mảng là danh sách các phần tử có cùng kiểu dữ liệu. Có 2 loại mảng là mảng một chiều hoặc mảng nhiều chiều. Với PHP thì các phần tử của mảng có thể không cùng kiểu dữ liệu, và các phần tử của mảng đƣợc truy xuất thông qua các chỉ mục (vị trí) của nó nằm trong mảng. Khởi tạo và truy xuất các phần tử trong mảng Để khai báo mảng ta dùng cú pháp sau: Giả sử có 2 sinh viên là Nguyễn Văn A và Nguyễn Văn B, sẽ khởi tạo một mảng $sinhvien để lƣu 2 sinh viên này. Cách 1: Cách 2: 'Nguyễn Văn A', 1 => 'Nguyễn Văn B' 27
  35. ); print_r($sinhvien); ?> Cách 3: Cách 4: Cả 4 cách đều có kết quả giống nhau nhƣng cú pháp lại khác nhau. Mảng có chỉ mục Là mảng có các phần tử đƣợc định danh một chỉ mục (kiểu số) và bắt đầu bằng số 0 và phần tử cuối cùng có chỉ mục là (n-1), trong đó n là tổng số phần tử của mảng. Điều này có nghĩa nếu mảng có 10 phần từ thì lần lƣợt các vị trí phần tử trong mảng là:[0] – [1] – [2] – [3] – [4] – [5] – [6] – [7] – [8] – [9]. Quay lại 4 cách giải của ví dụ trên: Với cách 1: Khởi tạo một mảng và gán trực tiếp 2 phần từ vào, vì mảng bắt đầu từ 0 nên nó tự hiểu phần tử đầu tiên có chỉ mục =0, và phần tử thứ 2 = 1. Với cách 2: Khởi taọ một mảng và gán trực tiếp 2 phần tử vào, nhƣng lúc gán có ghi rõ các chỉ mục cho từng phần tử. Với cách 3: Khởi tạo một mảng rỗng. sau đó dùng 2 lệnh để gán 2 phần tử vào, mỗi lệnh gán có chỉ rõ chỉ mục. Với cách 4: Khởi tạo một mảng rỗng, sau đó dùng 2 lệnh gán 2 phần tử vào nhƣng không chỉ rõ chỉ mục, lúc này PHP sẽ kiểm tra thấy mảng đang rỗng nên phần tử đầu tiên nó sẽ mặc định gán chỉ mục = 0, và phần tử tiếp theo sẽ bằng phần tử trƣớc nó + 1 tức là sẽ = 1. Để truy xuất các phần tử của mảng chỉ mục ta dùng cú pháp sau: $tenmang[$index]; trong đó $index là chỉ mục ta muốn lấy. Ví dụ: 28
  36. 'Nguyễn Văn A', 1 => 'Nguyễn Văn B' ); echo $sinhvien[0]; // Xuất ra màn hình phần tử 0 => Nguyễn Văn A echo $sinhvien[1]; // Xuất ra màn hình phần tử 1 => Nguyễn Văn B ?> Mảng kết hợp Là Mảng có các phần tử đƣợc định danh bằng một cái tên và đƣơng nhiên vị trí các phần tử sẽ không có thứ tự. Ví dụ: 'Nguyễn Văn A', 'sinhvien_b' => 'Nguyễn Văn B' ); print_r($sinhvien); ?> Tƣơng tự nhƣ những ví dụ ở phần mảng có chỉ mục, có thêm cách khai báo. Xét ví dụ sau: Trong ví dụ này điều đặc biệt là lúc gán sinh viên Nguyễn Văn B ta không truyền tên cho nó mà chỉ dùng dấu [] để thêm vào. Điều gì sẽ xảy ra? Câu trả lời nhƣ sau: Trình biên dịch sẽ chạy dòng thứ 1 khởi tạo một mảng rỗng, dòng thứ 2 thêm một phần tử cho mảng với tên sinhvien_a, dòng thứ 3 nó sẽ thấy không có truyền chỉ mục 29
  37. nên nó sẽ lƣu giá trị Nguyễn Văn B dƣới dạng chỉ mục. Nó xét thấy trong mảng này chƣa có chỉ mục nào (vì dòng 2 truyền dạng kết hợp), nên sinh viên Nguyễn Văn B sẽ đƣợc lấy chỉ mục = 0. Việc truy xuất các phần tử trong mảng kết hợp tƣơng tự nhƣ mảng chỉ mục ta dùng cú pháp sau: $tenmang[$name], trong đó $name là tên của phần tử muốn lấy ra. 2.2.10. Kiểu đối tƣợng PHP5 là một ngôn ngữ lập trình hƣớng đối tƣợng (OO - Object Oriented). Nói một cách đơn giản nhất thì lập trình hƣớng đối tƣợng (OOP - Object Oriented Programming) là việc tạo ra một kiểu dữ liệu mới (đối tƣợng - object hay lớp - class). Thay vì việc phải tạo một dãy các hàm liên quan đến đối tƣợng đó, sử dụng thuộc tính (properties) và phƣơng thức (method) trực tiếp của đối tƣợng đó. 2.2.11. Giá trị Null Một biến đƣợc coi là NULL (không có giá trị) nếu nó thỏa mãn cả 3 điều kiện sau: 1. Nó đƣợc gán là NULL (không phân biệt hoa thƣờng) 2. Nó chƣa bao giờ "đƣợc" (hay "bị") gán giá trị. 3. Nó đã bị thực hiện bằng lệnh unset - hàm hủy bỏ các biến chỉ định. Để kiểm tra một biến có là NULL hay không, ta có thể sử dụng hàm is_null (biến). Ví dụ: 2.3. Khái niệm biến, hằng và chuỗi 2.3.1. Biến trong PHP Biến đƣợc xem là vùng nhớ dữ liệu tạm thời. Và giá trị có thể thay đổi đƣợc. Biến đƣợc bắt đầu bằng ký hiệu "$". Một biến đƣợc xem là hợp lệ khi nó thỏa mãn các yếu tố : + Tên của biến phải bắt đầu bằng chữ cái hay dấu gạch dƣới và theo sau là các ký tự, số hay dấu gạch dƣới, không chứa dấu cách. + Tên của biến không đƣợc phép trùng với các từ khóa của PHP. 30
  38. Trong PHP để sử dụng một biến ta thƣờng phải khai báo trƣớc, tuy nhiên đối với các lập trình viên khi sử dụng họ thƣờng xử lý cùng một lúc các công việc, nghĩa là vừa khai báo vừa gán dữ liệu cho biến. Bản thân biến cũng có thể gán cho các kiểu dữ liệu khác. Và tùy theo ý định của ngƣời lập trình. Cú pháp khai báo biến: $tên_biến [=giá_trị_khởi_tạo]; Ví dụ: Biến trong biến Khi khai báo biến và khởi tạo giá trị cho biến với kiểu dữ liệu, sau đó muốn sử dụng giá trị của biến đó thành tên biến và có giá trị chính là giá trị của biến trƣớc đó thì sử dụng cặp dấu $$. Ví dụ: Biến $var có giá trị là "total", sau đó muốn sử dụng biến là total thì khai báo nhƣ sau: ::Welcome to PHP Change DataType of Variable "; $$var=10; echo $total; ?> Tầm vực của biến 31
  39. Tầm vực của biến phụ thuộc vào nơi khai báo biến, nếu biến khai báo bên ngoài hàm thì sẽ có tầm vực trong trang PHP, trong trƣờng hợp biến khai báo trong hàm thì chỉ có hiệu lực trong hàm đó. Ví dụ, Ta có biến $a khai báo bên ngoài hàm nhƣng khi vào trong hàm thì biến $a đƣợc khai báo lại, biến này có tầm vực bên trong hàm. Tƣơng tự nhƣ vậy, khi biến $i khai báo trong hàm thì chỉ có tầm vực bên trong hàm cho dù chúng đƣợc khai báo lại bên ngoài nhƣ ví dụ sau: Ví dụ: ::Welcome to PHP Scope of Variable a:=$a"; echo " i:=$i"; /* reference to local scope variable */ } Test(); echo " a:=$a"; $i=1000; echo " i:=$i"; ?> Ngoài ra, để sử dụng biến toàn cục trong hàm, sử dụng từ khóa global, khi đó biến toàn cục sẽ có hiệu lực bên trong hàm. Ví dụ khai báo biến $a bên ngoài hàm, sau đó bên trong hàm Test sử dụng từ khoá global cho biến $a, khi đó biến $a sẽ đƣợc sử dụng và giá trị đó có hiệu lực sau khi ra khỏi hàm. 32
  40. Ví dụ: Welcome to PHP Scope of Variable a:=$a"; echo " i:=$i"; /* reference to local scope variable */ } Test(); echo " a:=$a"; $i=1000; echo " i:=$i"; ?> 2.3.2. Hằng Nếu biến là cái có thể thay đổi đƣợc thì ngƣợc lại hằng là cái ta không thể thay đổi đƣợc . 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 ); Cũng giống với biến hằng đƣợc xem là hợp lệ thì chúng phải đáp ứng một số yếu tố : + Cách đặt tên hằng giống tên biến. + Hằng có thể truy cập bất cứ vị trí nào trong mã lệnh + Hằng chỉ đƣợc phép gán giá trị duy nhất một lần. Ví dụ: ::Welcome to PHP 33
  41. Constant pi:=".pi; echo " pi:=".constant("pi"); } Test(); echo " pi:=".pi; echo " pi:=".constant("pi"); ?> Kiểm tra hằng Khi sử dụng hằng, mà hằng chƣa tồn tại thì sử dụng hàm defined nhƣ ví dụ sau: Ví dụ: Welcome to PHP Constant pi:=".pi; else echo " pi not defined"; if(defined("hrs")) echo " hrs:=".hrs; else echo " hrs not defined"; } Test(); ?> 34
  42. 2.3.3. Chuỗi Các chuỗi có thể đƣợc chỉ ra bằng cách dùng một trong hai tập phân định. Nếu chuỗi đƣợc đóng lại trong dấu nháy kép (“), số lƣợng bên trong chuỗi sẽ đƣợc mở rộng ra (phụ thuộc vào một số hạn chế của từ loại). Cũng nhƣ C và Perl, dấu xổ ngƣợc (“\”) có thể đƣợc sử dụng trong việc chỉ ra các ký tự đặc biệt: Ví dụ: „Huy‟ "welcome to VietNam" Để tạo một biễn chuỗi, ta phải gán giá trị chuỗi cho một biến hợp lệ. Ví dụ: $fisrt_name= "Nguyen"; $last_name= „Van A‟; Để liên kết một chuỗi và một biến ta thƣờng sử dụng dấu "." Ví dụ: Welcome to”.$test.” ” ?> 2.4. Toán tử và biểu thức 2.4.1. Biểu thức Biểu thức là một tổ hợp các toán hạng và toán tử. Toán tử thực hiện các thao tác nhƣ cộng, trừ, nhân, chia, so sánh, Toán hạng là những biến hay là những giá trị mà các phép toán đƣợc thực hiện trên nó. Ví dụ $a + $b thì $a và $b đƣợc gọi là toán hạng, dấu + đƣợc gọi là toán tử, cả 2 kết hợp lại thành một biểu thức ($a + $b). Mỗi biểu thức chỉ có một giá trị nhất định. Ví dụ ta có biểu thức ($a + $b) thì biểu thức này có giá trị là tổng của $a và $b. Ví dụ: $ketqua = $a - $b; $ketqua = 7 + 6; $ketqua = 3*$x + 4*$y; 2.4.2. Toán tử gán Khi gán một giá trị hay biến vào một biến trong PHP, phải dùng đến phép gán, nhƣng trong PHP cũng giống nhƣ trong C thì có những phép gán đƣợc đơn giản hoá hay nói đúng hơn là chuẩn hoá để rút gọn lại trong khi viết. Phép gán thông thƣờng nhất nhƣ sau: $j=i; 35
  43. $str1 =” Hello!”; $b=true; Phép gán thêm một giá trị là 1 $k=0; $k++; Phép gán chuỗi $strX="Hello"; $strX.=” world”; $strX.=”ABCc”.$x; Phép gán thêm một với chính nó giá trị $k=0;$j=1; $k+=$j; tƣơng tự nhƣ vậy ta có $k*=2, nghĩa là $k=$k*2 2.4.3. Toán tử số học Là dạng phép tính giản đơn cộng, trừ, nhân, chia trong số học. Ngoài ra còn có phép chia lấy dƣ (%). Đƣợc sử dụng để lấy ra đơn vị dƣ của một phép toán. Toán tử Giải thích Ví dụ Kết quả + Cộng hai số hạng 10+8 18 - Trừ hai số hạng 10-8 2 * Nhân hai số hạng 10*8 80 / Chia hai số hạng 10/3 3.3333333 % Trả về số dƣ 10%3 1 2.4.4. Toán tử so sánh Là toán tử đƣợc sử dụng để thực hiện các phép toán so sánh giữa hai số hạng. Toán tử Tên Giải thích Ví dụ == Bằng Hai số hạng bằng nhau $a == 5 != Không bằng Hai số hạng khác nhau $a != 5 === Đồng nhất Hai số bằng nhau và cùng kiểu $a === 5 > Lớn hơn Vế trái lớn hơn vế phải $a > >= Lớn hơn hoặc bằng Vế trái lớn hơn hoặc bằng vế phải $a >= 5 < Nhỏ hơn Vế trái nhỏ hơn vế phải $a <5 <= Nhỏ hơn hoặc bằng Vế trái nhỏ hơn hoặc bằng vế phải $a <= 5 2.4.5. Toán tử logic Toán tử logic là các tổ hợp các giá trị boolean. Ví dụ: Toán tử or trở về true nếu toán tử trái hoặc toán tử phải là true. True || false là true. Ta có bảng các toán tử nhƣ sau: 36
  44. Toán tử Tên Trả về True nế Ví dụ Kết quả || Or Vế trái hoặc vế phải là True True || False True Or Or Vế trái hoặc vế phải là True True || False True Xor Xor Vế trái hoặc vế phải là True True || False False nhƣng không phải cả hai && And Vế trái và vế phải là True True && False False And And Vế trái và vế phải là True True && False False ! Not Không phải là True !True False 2.4.6. Toán tử kết hợp Khi tạo mã PHP, ta sẽ thƣờng nhận thấy cần phải tăng hoặc giảm lƣợng biến một số nguyên nào đó, thƣờng thực hiện điều này khi ta đếm một giá trị nào đó trong vòng lặp. Phép toán Ví dụ Giải thích ++ $a++ Bằng với $a = $a + 1 $a Bằng với $a = $a – 1 += $a += $b Bằng với $a = $a + $b -= $a -=$b Bằng với $a = $a - $b *= $a *=$b Bằng với $a = $a * $b /= $a /=$b Bằng với $a = $a / $b 2.4.7. Độ ƣu tiên các phép toán 1) Độ ƣu tiên toán tử luận lý Độ ƣu tiên theo thứ tự nhƣ sau: NOT -> AND -> OR Ví dụ: Tính độ ƣu tiên sau ( 7 > 5 && !(-5 > 1) || 10 == 10 ) (1) Bƣớc 1: trong biểu thức này có một phép toán NOT đó là !(-5 > 1) nên ta tính trƣớc phép này. Trong PHP cũng nhƣ các ngôn ngữ lập trình khác biểu thức !(biểu thức) cùng ý nghĩa với biểu thức (biểu thức) == false nên biểu thức ở trên ta biến đổi thành( (-5 > 1 ) == false ). Biểu thức này trả về giá trị TRUE vì (-5 > 1) là sai. Bƣớc 2: Lấy kết quả bƣớc 1 ta viết lại biểu thức (1) nhƣ sau: ((7>5) && true || 10 == 10) Theo độ ƣu tiên thì ta tính phép AND trƣớc tức là tính ((7 > 5) && true) trƣớc. Phép tính này trả về TRUE vì (7 > 5) = true suy ra true && true => true Bƣớc 3: Bƣớc này lấy kết quả ở bƣớc 2 ta ráp vào thì biểu thức (1) nhƣ sau: (true || 10 == 10). Phép OR sẽ trả về TRUE nếu một trong 2 biểu thức có giá trị true => biểu thức (1) là biểu thức có giá trị TRUE. 2) Độ ƣu tiên các toán tử Độ ƣu tiên các toán tử thiết lập thứ tự ƣu tiên tính toán của một biểu thức. Tóm lại độ ƣu tiên trong PHP đề cập đến thứ tự các phép tính mà PHP sẽ biên dịch 37
  45. trƣớc. Các toán tử và biểu thức trong php có sự liên hệ lẫn nhau, toán tử kết hợp toán hạng tạo thành biểu thức. Bảng thứ tự ƣu tiên của các toán tử số học. Loại toán tử Toán tử Tính kết hợp Một ngôi - , ++, Phải sang trái Hai ngôi ^ Trái sang phải *, /, % +, - = Phải sang trái Những toán tử nằm cùng một hàng có cùng độ ƣu tiên và cấp độ ƣu tiên đi từ trên xuống dƣới. Việc tính toán biểu thức số học sẽ đƣợc tính toán từ trái qua phải và ƣu tiên trong ngoặc trƣớc kết hợp với độ ƣu tiên trong bảng (nhƣ trong tính toán thƣờng thì nhân chia trƣớc, cộng trừ sau ƣu tiên trong ngoặc). Ví dụ: $t = -8 * 4 – 3 Bƣớc 1: tính -8 trƣớc vì đây là oán tử một ngôi có độ ƣu tiên cao nhất. Kết quả = -8 Bƣớc 2: -8 *4 vì phép nhân có độ ƣu tiên cao hơn phép -. Kết quả = -32 Bƣớc 3: -32 – 3: vì đây là phép cuối cùng, không cần phải so sánh với phép tính khác nữa. Kết quả = -35 2.5. Mảng 2.5.1. Mảng một chiều Để khai báo mảng một chiều, có thể sử dụng cú pháp nhƣ sau: $arr=array(); $arrs=array(5); Ví dụ minh họa mảng 1 chiều. Truy cập vào phần tử mảng, có thể sử dụng chỉ mục của phần tử nhƣ sau: $arr[0]=1; $arrs[1]=12; Lấy giá trị của phần tử mảng, cũng thực hiện nhƣ truy cập mảng phần tử. echo $arr[0]; $x=$arrs[5]; Chẳng hạn, ta khai báo mảng động và mảng có số phần tử cho trƣớc, sau đó truy cập và lấy giá trị của chúng nhƣ ví dụ trong trang arrayone.php sau: 38
  46. Ví dụ: Array Mang mot chieu "; echo "Gia tri nho nhat ".min($arr)." " ; echo "Gia tri trung binh ".array_sum($arr) / sizeof($arr)." " ; for($i=0;$i "; echo "Gia tri nho nhat ".min($arrs)." " ; echo "Gia tri trung binh ".array_sum($arrs) / sizeof($arrs)." " ; ?> Kết quả khi triệu gọi trang arrayone.php. 39
  47. Hình 2.5. Kết quả khi triệu gọi trang arrayone.php. Ta cũng có thể sử dụng khai báo mảng nhƣ ví dụ sau: Ví dụ: "Albert", "lastname"=>",instein", "age"=>"124"); echo $husband[firstname]; ?> Để lấy giá trị của tuổi không thể sử dụng cách trên : echo $a[2]. Vì ta đã gán giá trị của index cho một tên gọi khác. Do vậy để lấy giá trị của tuổi ta sử dụng nhƣ sau: echo $a[age] và kết quả sẽ cho ra 124. 2.5.2. Mảng hai chiều Mảng nhiều chiều là mảng có nhiều chỉ mục cho từng phần tử, ví dụ mảng 2 chiều thì mỗi phần tử có 2 chỉ muc, 3 chiều thì mỗi phần tử có 3 chỉ mục. Mảng nhiều chiều thực chất là mảng 1 chiều nhƣng đƣợc thể hiện dƣới dạng nhiều chiều. 40
  48. Tƣơng tự nhƣ mảng một chiều, trong trƣờng hợp làm việc mảng hai chiều khai báo tƣơng tự nhƣ trang arraytwo.php sau: Ví dụ: Array Mang hai chieu "; } echo " "; $arrs=array(array(1,2,3,4,5,6,7), array(11,12,13,14,15,16,17)); for($i=0;$i<=7;$i++) { for($j=0;$j<=7;$j++){ $arrs[$i][$j]=10+$i*$j; } } 41
  49. for($i=0;$i "; } echo " "; ?> Khi triệu gọi trang này trên trình duyệt, kết quả nhƣ sau: Hình 2.6. Kết quả thực hiện arraytwo.php Ta cũng có thể sử dụng khai báo mảng nhƣ trang mang.php nhƣ sau: Ví dụ: array(“firstname”=>”Albert”, “lastname”=>”Einstein”,“age”=>124), “wife” => array(“firstname”=>”Mileva”, “lastname”=>”Einstein”,“age”=>123)); //do the same for each table in your restaurant ?> Nếu muốn xuất firstname của mọi ngƣời, ta dùng hàm xuất nhƣ sau: 42
  50. Hình 2.7. Kết quả thực hiện trang mang.php 2.5.3. Các hàm xử lý mảng 1). Các hàm xắp xếp mảng PHP cung cấp nhiều cách để lƣu trữ giá trị của mảng, sau đây là mô tả một vài hàm sắp xếp trong mảng. arsort(array) : Sắp xếp mảng giảm theo giá trị và duy trì quan hệ khóa/ giá trị. asort(array): Sắp xếp mảng tăng theo giá trị và duy trì quan hệ khóa/ giá trị. rsort(array): Sắp xếp một mảng giảm theo giá trị. sort(array): Sắp xếp một mảng tăng theo giá trị. Ví dụ: Hình 2.8. Kết quản thực hiện sắp xếp mảng 43
  51. Chú ý: Ở đây dùng hàm mới prinf_r, chức năng của hàm này là xuất thông tin về một biến mà ngƣời ta có thể đọc nó dễ dàng. Nó thƣờng đƣợc dùng để kiểm tra giá trị của mảng, một cách cụ thể. Ở đây hàm sort dùng để sắp xếp theo thứ tự Alpha 2) Các hàm xử lý mảng - Hàm array_change_key_case($array, $case) Chuyển tất cả các key trong mảng $array sang chữ hoa nếu $case = 1 và sang chữ thƣờng nếu $case = 0. Ta có thể dùng hằng số CASE_UPPER thay cho số 1 và CASE_LOWER thay cho số 0. Ví dụ: $array = array( 'chu_thuong' = > 'Hello' ); $array = array_change_key_case($array, CASE_UPPER); var_dump($array); // Kết quả là: 'CHU_THUONG' => 'Hello' - Hàm array_combine($array_keys, $array_values) Trộn 2 mảng $array_keys và $array_values thành một mảng kết hợp với $array_keys là danh sách keys, $array_value là danh sách value tƣơng ứng với key. Điều kiện là 2 mảng này phải bằng nhau. Ví dụ: $array_keys = array('a', 'b', 'c'); $array_values = array('one', 'two', 'three'); print_r(array_combine($array_keys, $array_values)); /* kết quả: Array ( [a] => one [b] => two 1 => three; )*/; - Hàm array_count_values ( $array ) Đếm số lần xuất hiện của các phần tử giống nhau trong mảng $array và trả về một mảng kết quả. Ví dụ: $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); /* Kết quả: 44
  52. Array ( [1] => 2; [hello] => 2; [world] => 1 )*/ - Hàm array_push(&$array, $add_value1, $add_value2, $add_value ) Thêm vào cuối mảng $array một hoặc nhiều phần tử với các giá trị tƣơng ứng biến $add_value truyền vào. Ví dụ: $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); print_r($stack); /* Kết quả Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ) */ - Hàm array_pop(&$array): Xóa trong mảng $array phần tử cuối cùng và trả về phần tử đã xóa. Ví dụ: $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); print_r($stack); /* Biến $stack sẽ còn 3 giá trị Array ( [0] => orange [1] => banana [2] => apple ) Còn biến $fruit sẽ có giá trị là raspberry */ 45
  53. - Hàm array_pad($array, $size, $value) Kéo dãn mảng $array với kích thƣớc là $size, và nếu kích thƣớc truyền vào lớn hơn kích thƣớc mảng $array thì giá trị $value đƣợc thêm vào, ngƣợc lại nếu kích thƣớc truyền vào nhỏ hơn kích thƣớc mảng $array thì sẽ giữ nguyên. Nếu muốn giãn ở cuối mảng thì $size có giá trị dƣơng, nếu muốn giãn ở đầu mảng thì $size có giá trị âm. Ví dụ: $input = array(12, 10, 9); // Giãn thành 5 phần tử ở cuối mảng và // các phần tử giãn có giá trị là 5: $result = array_pad($input, 5, 0); // Kết quả là array(12, 10, 9, 0, 0) // Giản thành 7 phần tử ở đầu mảng // và các phần tử giãn có giá trị -1 $result = array_pad($input, -7, -1); // Kết quả là array(-1, -1, -1, -1, 12, 10, 9) // Giãn thành 2 phần tử nhưng mảng $input // lại có 3 phần tử nên sẽ không được xử lý $result = array_pad($input, 2, "noop"); // Kết quả giữ nguyên array(12, 10, 9) - Hàm array_shift(&$array) Xóa phần tử đầu tiên ra khỏi mảng $array và trả về phần tử vừa xóa đó. Ví dụ: $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); print_r($stack); /* Kết quả biến $stack Array ( [0] => banana [1] => apple [2] => raspberry ) Kết quả biến $fruit là orange */ - Hàm array_unshift(&$array, $value1, $value2, ): Thêm các giá trị $value1, $value2, vào đầu mảng $array. Ví dụ: $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); 46
  54. print_r($queue); /*Kết quả là: * Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana * ) */ - Hàm is_array($variable) Kiểm tra một biến có phải kiểu mảng hay không, kết quả trả về true nếu phải và false nếu không phải. Ví dụ: $bien1 = array(); $bien2 = ''; // Kết quả trả về true var_dump($bien1); // Kết quả trả về false var_dump($bien2); - Hàm in_array($needle, $haystackarray) Kiểm tra giá trị $needle có nằm trong mảng $haystackarray không. trả về true nếu có và flase nếu không có. Ví dụ: $haystackarray = array('hello', 'nobody', 'freetuts.net'); // Kết quả là true var_dump(in_array('freetuts.net', $haystackarray)); // Kết quả là false var_dump(in_array('net', $haystackarray)); - Hàm array_key_exists($key, $searcharray) Kiểm tra key $key có tồn tại trong mảng $searcharray không, trả về true nếu có và false nếu không có. Ví dụ: $searcharray = array ( 'username' => 'thehalfheart', 'email' => 'thehalfheart@gmail.com', 'website' => 'freetuts.net' ); // Trả về true var_dump(array_key_exists('username', $searcharray)); // Trả về false var_dump(array_key_exists('otherkey', $searcharray)); 47
  55. - Hàm array_unique( $array ) Loại bỏ giá trị trùng trong mảng $array. Ví dụ: $array = array('freetuts.net', 'freetuts.net'); $result = array_unique($array); // Kết quả mảng chỉ còn 1 giá trị freetuts.net var_dump($result); - Hàm array_values ($array ) Chuyển mảng $array sang dạng mảng chỉ mục. Ví dụ: $array = array( 'username' => 'thehalfheart', 'password' => 'somepasss' ); var_dump(array_values($array)); /* Kêt quả của mảng là array( 0 => thehalfheart, 1 => somepasss ) */ 2.6. Các hàm xử lí chuỗi Việc xử lý chuỗi trong PHP rất là quan trọng vì dữ liệu để hiển thị trên trang web luôn luôn ở dạng chuỗi. Vì thế nếu nắm vững và xử lý nhuần nhuyễn thì sẽ giúp ít tốn công sức và thời gian hơn mà web chạy lại nhanh nữa. Bên dƣới là các hàm xử lý chuỗi trong php thông dụng hay sử dụng nhất. 2.6.1 Quy tắc trong chuỗi Nếu chuỗi đƣợc đặt trong dấu nháy kép (“”) thì nếu trong chuỗi có ký tự (“) thì phải thêm dấu gạch chéo đằng trƣớc ký tự đó. Ví dụ: echo "Nam nói\"Cậu ấy đang ăn tối\" "; Nếu chuối đƣợc đặt trong dấu nháy kép thì trong chuỗi ta có thể truyền biến vào mà không cần dùng phép nối chuỗi. Ví dụ: $str = "đang ăn tối"; echo "Nam nói\"Cậu ấy $str\" "; Nếu chuỗi đƣợc đặt trong dấu nháy đơn thì nếu trong chuỗi có ký tự („) thì phải thêm dấu gạch chéo đằng trƣớc ký tự đó. Ví dụ: echo 'Freetuts's a website learning online'; 48
  56. 2.6.2. Định dạng chuỗi PHP là kịch bản đƣợc xem là tốt nhất cho xử lý chuỗi, bằng cách sử dụng các hàm xử lý chuỗi, có thể thực hiện các ý định của mình khi tƣơng tác cơ sở dữ liệu, tập tin hay dữ liệu khác. Khi xuất kết quả ra trình duyệt, có thể sử dụng các định dạng chuỗi tƣơng tự nhƣ ngôn ngƣ lập trình C. Chẳng hạn, cần in giá trị của biến $i trong trang dinhdang.php nhƣ ví dụ. Ví dụ: String Functions Dinh dang "; printf("Total amount of order: %.1f", $i); echo " "; printf("Total amount of order: %.2f", $i); echo " "; printf("Total amount of order: i=%.2f, j=%.0f", $i,$j); ?> Kết quả xuất hiện nhƣ sau: Hình 2.9. Định dạng chuỗi in 49
  57. Trong đó các định dạng đƣợc chia ra nhiêu loại tuỳ thụôc vào các ký tự sử dụng. % - Không yêu cầu tham số. b – Trình bày dạng số integer và hiện thực dƣới dạng binary. c - Trình bày dạng số integer và hiện thực dƣới dạng mã ASCII. d - Trình bày dạng số integer và hiện thực dƣới dạng decimal. e - Trình bày dạng số logic và hiện thực dƣới dạng 1.2e+2. u - Trình bày dạng số integer và hiện thực dƣới dạng decimal không dấu. f - Trình bày dạng số float và hiện thực dƣới dạng số chấm động. o - Trình bày dạng số integer và hiện thực dƣới dạng hệ số 10. s - Trình bày dạng chuỗi. x - Trình bày dạng số integer và hiện thực dƣới dạng hệ số 16 với ký tự thƣờng. X - Trình bày dạng số integer và hiện thực dƣới dạng hệ số 16 với ký tự hoa. 2.6.3. Hàm chuyển đổi chuỗi Để chuyển đổi chuỗi ra ký tự hoa thƣờng sử dụng một trong 4 hàm nhƣ ví dụ trong trang chuyendoi.php. Ví dụ: String Functions Chuyen doi "; echo strtoupper($str); echo " "; echo strtolower($str); echo " "; echo ucfirst($str); echo " "; echo ucwords($str); echo " "; ?> Kết quả trình bày nhƣ sau: 50
  58. Hình 2.10. Chuyển đổi chuỗi 2.6.4. Hàm tách và kết hợp chuỗi Để tách hay kết hợp chuỗi, sử dụng một trong các hàm thƣờng sử dụng nhƣ strtok, explode hay substr. Chẳng hạn, ta sử dụng 4 hàm này trong ví dụ trong trang tachchuoi.php. Ví dụ: String Functions Tach hop chuoi "; $tok = strtok($string, " "); while ($tok) { echo "Word= $tok "; $tok = strtok(" \n\t"); } echo $str." "; echo substr($str,24)." "; $a[]=array(); $a=explode(" ",$str); while($i=each($a)) 51
  59. { echo $i["value"]." "; } ?> Kết quả trình bày nhƣ sau Hình 2.11. Kết quả sử dụng hàm tách chuỗi Trong trƣờng hợp kết hợp giá trị của các phần tử của mảng thành chuỗi, sử dụng hàm implode nhƣ ví dụ trong trang kethop.php. Ví dụ: String Functions Ket hop chuoi "; } 52
  60. $str=implode(" ",$a); echo $str; ?> Kết quả trình bày nhƣ sau: Hình 2.12. Kết quả sử dụng hàm kết hợp chuỗi 2.6.5. Tìm kiếm và thay thế chuỗi 1) Hàm str_replace Để thay thế chuỗi, sử dụng hàm str_replace, chẳng hạn trong trƣờng hợp lấy giá trị từ thẻ nhập liệu, sau đó tìm kiếm nếu phát hiện dấu „ thì thay thế thành hai dấu nháy nhƣ trang replace.php. Ví dụ: String Functions That the chuoi <?php $str=""; if (isset($txtfullname)) 53
  61. $str = $txtfullname; if( $str != ""); $str=str_replace("o","a",$str); echo $str." "; ?> fullname: "> Khi triệu gọi trang replace.php trên trình duyệt, sẽ có kết quả nhƣ sau: Hình 2.13. Kết quả sử dụng hàm thay thế chuỗi Ngoài ra, có thể sử dụng hàm strpos (trả về vị trí chuỗi con trong chuỗi mẹ). 2) Hàm preg_replace Hàm preg_replace dùng để replace một chuỗi nào đó khớp với đoạn Regular Expression truyền vào. Hàm này có chức năng tƣơng tự nhƣ str_replace nhƣng có sự khác biệt là một bên dùng regex một bên không dùng. Cú pháp: preg_replace ( $pattern, $replacement, $subject) Trong đó: $partern: là chuỗi Regular Expression $replacement: là chuỗi replace thành $subject: là string muốn duyệt và replace Kết quả trả về của hàm preg_replace là chuỗi đã đƣợc replace Ví dụ: Replace chuỗi hi thành chuỗi hello trong chuỗi hi everybody, hi there 54
  62. $partern = '/hi/'; $subject = 'hi everybody, hi there'; $replacement = 'hello'; echo preg_replace($partern, $replacement, $subject); Kết quả xuất ra màn hình là chuỗi hello everybody, hello there đã đƣợc replace Ví dụ: Xóa thẻ h1 trong chuỗi Welcome to freetuts.net Nhận xét: Ta thấy để xóa thẻ h1 thì sẽ phải replace cho cả thẻ đóng và thẻ mở thành ký tự trống ''. Ta sẽ có 2 cách xử lý cho bài này. Cách 1: Dùng toán tử OR trong Regular Expression, tức là sẽ kiểm tra nếu là thẻ đóng hoặc thẻ mở thì sẽ bị replace thành ký tự trống. Chuỗi regex sẽ nhƣ sau $partern = '/( )|( )/'. Ta đã dùng dấu mở và đóng () để gộp 2 nhóm thẻ mở và thẻ đóng lại. $partern = '/( )|( )/'; $subject = ' Welcome to freetuts.net '; $replacement = ''; echo preg_replace($partern, $replacement, $subject); Cách 2: Dùng toán tử kiểm tra có hoặc không đó là dấu ?. quay lại bài trƣớc để xem các ví dụ và cách dùng. Ta thấy thẻ mở và thẻ đóng chỉ khác nhau ở chỗ dấu /. Nhƣ vậy chuỗi partern sẽ nhƣ sau $partern = '/( )/'. Vì dấu / là ký tự đặc biệt trong Regular Expression nên ta đã thêm một dấu \ để đặt trƣớc nó. Dấu ? là có ý nghĩa có hoặc không có ký tự, tức là hoặc . $partern = '/( )/'; $subject = ' Welcome to freetuts.net '; $replacement = ''; echo preg_replace($partern, $replacement, $subject); Ví dụ: Dùng Regular Expression xóa tất cả những thẻ html (h1, h2, h3, h4, h5) của một đoạn text. Nếu không dùng hàm preg_replace kết hợp với Regular Expression thì trong php có cung cấp 1 hàm để xử lý vấn đề này, đó là hàm strip_tags. Nhƣng trong đề bài yêu cầu dùng Regular Expresision. Ý tƣởng: Ở ví dụ trên ta đã xóa đƣợc một thẻ h1, nhƣ vậy muốn xóa các thẻ khác thì chỉ cần copy và thay đổi giá trị thẻ là đƣợc, cách làm nhƣ sau: $subject = ' This is h1 This is h2 This is h3 This is h4 This is h5 '; // H1 55
  63. $subject = preg_replace('/ /', '', $subject); // H2 $subject = preg_replace('/ /', '', $subject); // H3 $subject = preg_replace('/ /', '', $subject); // H4 $subject = preg_replace('/ /', '', $subject); // H5 $subject = preg_replace('/ /', '', $subject); echo $subject; 3) Hàm preg_match_all Hàm preg_match_all cũng có chức năng giống nhƣ preg_match đó là so khớp và trả về kết quả. Tuy nhiên vẫn có sự khác biệt đó là: Preg_match: Chỉ chỉ trả về một kết quả cho mỗi regex con. Ví dụ lấy đoạn chuỗi bên trong cặp nháy kép của chuỗi xin chào "các bạn", chào mừng đến "freetuts.net" thì code nhƣ sau: $subject = 'Hello "Everybody", welcome to "freetuts.net"'; preg_match('/"(.+)"/', $subject, $matches); echo ' '; print_r($matches); echo ' '; Kết quả sẽ là: Array ( [0] => "Everybody", welcome to "freetuts.net" [1] => Everybody", welcome to "freetuts.net ) Mục đích chỉ lấy đoạn text bên trong cặp nháy kép, nhƣng nó trả về dài quá. Lý do là nó duyệt từ dấu nháy đầu chuỗi cho đến cuối chuỗi nên kết quả mới nhƣ vậy. Để lấy đoạn text trong cặp dấu nháy thứ nhất thì ta phải thêm dấu ? đằng sau dấu + của chuỗi partern trên, có ý nghĩa là lấy kết quả match đầu tiên. $subject = 'Hello "Everybody", welcome to "freetuts.net"'; preg_match('/"(.+?)"/', $subject, $matches); echo ' '; print_r($matches); echo ' '; Kết quả sẽ là: Array( 56
  64. [0] => "Everybody" [1] => Everybody ) Nhƣ preg_match chỉ lấy đƣợc một kết quả duy nhất. Có cách nào lấy hết kết quả không? Để trả lời ta xem qua hàm preg_match_all. preg_match_all: sẽ trả về hết kết quả so khớp chứ không phải là kết quả đầu tiên nhƣ preg_match. Cú pháp: preg_match_all ($pattern, $subject, &$matches) Trong đó: $partern là biểu thức Regular Expression $subject là chuỗi muốn kiểm tra &$matches là biến lưu kết quả sau khi match Nhƣ trên, tức là lấy đoạn chuỗi bên trong cặp nháy kép của chuỗi xin chào "các bạn", chào mừng đến "freetuts.net" $subject = 'Hello "Everybody", welcome to "freetuts.net"'; preg_match_all('/"(.+?)"/', $subject, $matches); echo ' '; print_r($matches); echo ' '; Kết quả là : Array( [0] => Array( [0] => "Everybody" [1] => "freetuts.net" ) [1] => Array( [0] => Everybody [1] => freetuts.net ) ) Kết quả nó trả về một mảng 2 phần tử cha. Nếu để ý thì sẽ thấy mỗi phần tử trả về là kết quả giống nhƣ hàm preg_match. Giờ thay đổi chuỗi $subject = 'Hello "Everybody", welcome to "freetuts.net", thanks for "like it"'. Array( [0] => Array( 57
  65. [0] => "Everybody" [1] => "freetuts.net" [2] => "like it" ) [1] => Array( [0] => Everybody [1] => freetuts.net [2] => like it ) ) Lấy kết quả thì có 2 lựa chọn: Nếu lấy có dấu ngoặc thì chọn phần tử thứ nhất Nếu lấy không có dấu ngoặc thì chọn phần tử thứ 2 Giải thích tại sao lại có 2 phần tử thì nhƣ bài trƣớc, phần tử thứ nhất là chuỗi toàn partern, phần tử thứ 2 là kết quả của đoạn regex (.+?) Ví dụ: Lấy tất cả nội dung bên trong tất cả thẻ div của một file html. Để lấy tất cả các đoạn text trong tất cả thẻ div thì ta phải dùng đến hàm preg_match_all trong php rồi, đoạn $partern sẽ có dạng $partern = '/ (.*?) /'. Lƣu ý phải có dấu ?, vì có dấu ? thì máy sẽ hiểu là lấy từng kết quả chứ không phải duyệt hết chuỗi rồi lấy. $subject = ' Div1 Div2 Div3 '; preg_match_all('/ (.*?) /', $subject, $matches); echo ' '; var_dump($matches); echo ' '; 2.6.6. Các hàm xử lý chuỗi hay sử dụng addcslashes ($str, $char_list) Hàm này sẽ thêm dấu gạch chéo (\) đằng trƣớc những ký tự trong chuỗi $str mà ta liệt kê ở $char_list. Ví dụ: // a z là gồm các từ từ a => z echo (addcslashes('freetuts.net FREETUTS.NET', 'a z')); // kết quả: \f\r\e\e\t\u\t\s.\n\e\t echo ' '; // a zA Z là gồm các từ từ a => z và A => Z echo (addcslashes('freetuts.net FREETUTS.NET', 'a zA Z')); addslashes ( $str ) 58
  66. Hàm này sẽ thêm dấu gách chéo trƣớc những ký tự („, “, \) trong chuỗi $str. Ví dụ: echo addslashes ("Freetuts's a website learning online"); // Kết quả là Freetuts's a website learning online stripslashes ($str) Hàm này ngƣợc với hàm addslashes, nó xóa các ký tự \ trong chuỗi $str. Ví dụ: echo stripslashes("Mot so ham 'xu ly chuoi' trong PHP"); // Kết quả Mot so ham 'xu ly chuoi' trong PHP crc32 ( $str ) Hàm này sẽ chuyển chuỗi $str thành một dãy số nguyên (có thể âm hoặc dƣơng tùy theo hệ điều hành). Ví dụ: echo crc32 ('freetuts.net'); // kết quả: -838644060 explode ( $delimiter , $string) Hàm này sẽ chuyển một chuỗi $string thành một mảng các phần tử với ký tự tách mảng là $delimiter. Ví dụ: // Chuỗi cần chuyển $str = 'freetuts.net is a website free for you'; // Mỗi khoảng trắng sẽ là một phần tử trong mảng var_dump(explode(' ', $str)); /*Kết quả array 0 => 'freetuts.net', 1 => 'is', 2 => 'a' , 3 => 'website', 4 => 'free', 5 => 'for' , 6 => 'you' */ implode($delimiter, $piecesarray) Hàm này ngƣợc với hàm explode, nó chuyển một mảng $piecesarray thành chuỗi và mỗi phần tử cách nhau bởi chuỗi $delimiter Ví dụ: echo implode(' ', array( 59
  67. 'freetuts', 'xin', 'chào', 'các', 'bạn' )); // kếquả là freetuts xin chào các bạn ord ( $string ) Hàm này trả về mã ASCII của ký tự đầu tiên trong chuỗi $string. Ví dụ: echo ord ('Ab'); // kết quả: 65 strlen($string) Hàm này đếm số ký tự của chuỗi $string. Ví dụ: echo strlen('freetuts.net'); // kết quả: 12 str_word_count($str) Hàm này trả về số từ trong chuỗi $str. Ví dụ: echo str_word_count('freetuts xin chào các bạn'); // kết quả là 5 str_repeat( $str, int $n ) Hàm này lặp chuỗi $str $n lần. Ví dụ: echo str_repeat( 'Hello', 5 ); // Kết quả là HelloHelloHelloHelloHello str_replace( $chuoi_tim, $chuoi_thay_the, $chuoi_nguon ) Hàm này tìm kiếm và thay thế chuỗi. Ví dụ: $str = 'Freetuts Xin Chào Các Bạn'; $str = str_replace( 'Freetuts', 'Freetuts.net', $str ); echo $str; // kết quả là Freetuts.net Xin Chào Các Bạn Để thay thế nhiều chuỗi ta có thể dùng mảng để truyền vào $str = 'Freetuts Xin Chào Các Bạn'; $str = str_replace( array('Freetuts', 'Xin Chào'), array('Freetuts.net', 'Hello'), $str ); echo $str; // kết quả là Freetuts.net Hello Các Bạn md5( $str) Hàm này mã hóa chuỗi thành một dãy 32 ký tự (mã hóa md5). Ví dụ: 60
  68. echo md5('freetuts.net'); // Kết quả: 83617175fd8cf470d4af657a28def98e sha1($string) Hàm này mã hóa chuỗi thành một dãy 40 ký tự (mã hóa sha1) Ví dụ: echo sha1('freetuts.net'); // kết quả 8d9fa09de2e997d8fbb544326b84d1f894cd3ca3 htmlentities($str) Hàm này chuyển các thể html trong chuỗi $str sang dạng thực thể của chúng (html sẽ không còn tác dụng nên có thể echo ra bên ngoài). Ví dụ: echo htmlentities(' freetuts.net '); // Kết quả freetuts.net html_entity_decode($string) Ngƣợc lại với htmlentities, hàm này chuyển ngƣợc các ký tự dạng thực thể HTML sang dạng ký tự của chúng. Ví dụ: $str = htmlentities(' freetuts.net '); echo 'Entity: ' . $str . ' '; echo 'Decode: ' . html_entity_decode($str); htmlspecialchars( $string) Tƣơng tự nhƣ htmlentities. htmlspecialchars_decode($string) Tƣơng tự nhƣ html_entity_decode. strip_tags( $string, $allow_tags ) Hàm này bỏ các thẻ html trong chuỗi $string đƣợc khai báo ở $allow_tags. echo strip_tags(' freetuts.net ', 'b'); substr( $string, $start, $length ) Hàm này lấy một chuỗi con nằm trong chuỗi $str bắt đầu từ ký tự thứ $start và chiều dài $length. echo substr( 'freetuts.net', 0, 8); // Kết quả freetuts strstr( $string, $ky_tu_cho_truoc ) Tách một chuỗi bắt đầu từ $ky_tu_cho_truoc cho đến hết chuỗi. echo strstr('freetuts.net Xin Chào', 'Xin'); // Kết quả: Xin Chào strpos($str, $chuoi_tim ) 61
  69. Tìm vị trí của chuỗi $chuoi_tim trong chuỗi $str, kết quả trả về false nếu không tìm thấy. echo strpos('freetuts.net chào các bạn', 'chào'); // kết quả 13 strtolower($str); Chuyển tất cả các ký tự chuỗi $str sang chữ thƣờng strtoupper($string ); Chuyển tất cả các ký tự chuỗi $str sang chữ hoa ucfirst( $string ) Chuyển ký tự đầu tiên chuỗi $string sang chữ hoa ucfirst( $string ) Chuyển ký tự đầu tiên trong chuỗi $string sang chữ thƣờng ucwords( $string ) Chuyên từ đầu tiên trong chuỗi $string sang chữ hoa trim($string, $ky_tu) Xóa ký tự $ky_tu nằm ở đầu và cuối chuỗi $str, nếu ta không nhập $ky_tu thì mặc định nó hiểu là xóa khoảng trắng. echo trim(' freetuts.net '); // kết quả: 'freetuts.net' echo trim('freetuts.neth'); // kết quả: 'freetuts.net' ltrim($string, $ky_tu) Tƣơng tự nhƣ trim nhƣng chỉ xóa bên trái rtrim($string, $ky_tu) Tƣơng tự nhƣ trim nhƣng chỉ xóa bên phải nl2br($string) Chuyển các ký tự xuống dòng “\n” thành thẻ json_decode($json, $is_array) Dùng để chuyển chuỗi dạng JSON sang các đối tƣợng mảng hoặc object. Nếu $is_array có giá trị false thì hàm sẽ chuyển một chuỗi $json thành một Class (object), ngƣợc lại nếu $is_array có giá trị true thì sẽ chuyển chuỗi $json thành một mảng. json_encode($array_or_object) Chuyển một mảng hoặc mội đối tƣợng (classs) sang chuỗi dạng JSON 2.7. Hàm và sử dụng hàm Hàm do ngƣời sử dụng định nghĩa cho phép xử lý những tác vụ thƣờng lặp đi lặp lại trong ứng dụng. 62
  70. Để khai báo hàm, sử dụng từ khoá function với cú pháp tƣơng tự nhƣ sau: function functioname($parameter) { return value; } Trong trƣờng hợp hàm không có giá trị trả về thì hàm đƣợc xem nhƣ thủ tục. Ngoài ra, có thể khai báo tham số tuỳ chọn bằng cách gán giá trị mặc định cho tham số. Ví dụ ta khai báo: function functioname($parameter1, $parameter2=10 ) { return value; } Đối với trƣờng hợp này thì tham số $parameter1 là tham số bắt buộc và tham số $parameter2 là tham số tuỳ chọn, khi gọi hàm nếu không cung cấp tham số cho $parameter2 thì tham số này có giá trị là 10. Ví dụ: Tạo trang function.php có hàm getResult nhận hai số và phép toán sau đó tuỳ thuộc vào phép toán hàm trả về kết quả. Nếu ngƣời sử dụng không cung vấp phép toán thì mặc định là phép toán + ::Welcome to PHP Function <?php function getResult($number1, $number2,$operator="+") { $result=0; switch($operator) { case "+": $result=$number1+$number2; break; case "-": $result=$number1-$number2; break; case "*": $result=$number1*$number2; break; 63
  71. case "/": if($number2!=0) $result=$number1/$number2; else $result=0; break; case "%": if($number2!=0) $result=$number1%$number2; else $result=0; break; } return $result; } echo "result of default operator: ".getResult(10,20); echo " "; echo "result of * operator: ".getResult(10,20,"*"); ?> Nếu muốn định nghĩa function không có giá trị trả về, có thể khai báo trong trang void.php nhƣ ví dụ sau: Ví dụ: function calloperator() { echo "result of default operator: ".getResult(10,20); echo " "; echo "result of * operator: ".getResult(10,20,"*"); } calloperator(); ?> Trong trƣờng hợp truyền tham số nhƣ tham biến, sử dụng ký hiệu & trƣớc tham số, chẳng hạn ta khai báo hàm có tham biến có tên average nhƣ trong trang reference.php nhƣ sau: 64
  72. Ví dụ: ::Welcome to PHP Function "; echo "result of Average is : ".$bq; echo " "; function getAmounts($quantity, $price,$average) { $result=0; $result=$quantity*$price; $average=$result*6/12; return $result; } $bq=0; echo "result is : ".getAmounts(10,20,$bq); echo " "; echo "result of Average is : ".$bq; ?> Trong trƣờng hợp trên thì hàm getAmount có tham số $average là tham biến còn hàm getAmounts có tham số $average là tham trị, và kết quả trả về của biến $bq khi gọi hàm getAmount là 100 trong khi đó giá trị của biến này trong hàm getAmounts là 0. 2.8. Sử dụng include và Require Include và Require là hai hàm PHP chuyên dùng để gọi một file khác. Mục đích của việc gọi file php khác là để tận dụng lại code trong file php đƣợc gọi đó. 65
  73. Hình 2.14. Hoạt động của Include Tuy là cùng dùng chung cho một mục đích chính là chèn một file .php vào file php hiện tại. Nhƣng include và require khác nhau về cách vận hành. 2.8.1. Sử dụng Include include – đúng với cái tên của nó. Nó có nhiệm vụ chèn file php vào vị trí mà dòng include đƣợc thực thi. Hơn nữa ta còn có thể include một file nhiều lần. Cách sử dụng hàm include include "file.php"; include "tenfile.php"; Ta thể hình dung là, toàn bộ nội dung của file.php sẽ đƣợc thay cho dòng include “file.php” trong code ở trên, và tƣơng tự cho file “tenfile.php”. Giả sử file.php có nội dung là echo "Đây là file.php"; Nếu ta include file.php này 10 lần thì dòng “Đây là file.php” cũng đƣợc xuất ra đúng 10 lần 2.8.2. Sử dụng Require hàm require có chức năng tƣơng tự nhƣ hàm include. Cách sử dụng hàm require 66
  74. require "tênfile.php"; 2.8.3. Sự khác nhau giữa Include và Require Require làm đƣợc những gì mà hàm include làm. Điểm khác nhau lớn nhất của chúng là ở điều kiện với file đƣợc include/require. Đối với include, PHP không quan tâm đến việc file đích có tồn tại. Nếu file đích không tồn tại, một dòng Warning quen thuộc sẽ hiện ra. Và nếu có thì PHP sẽ nạp file đó vào code đang thực thi nhƣ bình thƣờng. Việc này nói lên một điều rằng, cho dù file đƣợc include có tồn tại hay không thì code của ta vẫn chạy tiếp. Khác với include. Require bắt buộc file đích phải tồn tại và code của ta sẽ chỉ đƣợc chạy khi nào mà lệnh require đƣợc thƣc thi thành công. Trong trƣờng hợp không có file đƣợc require dòng code sẽ bị dừng ngay tại dòng require và PHP sẽ quăng ra môt thông báo lỗi dạng Fatal 2.8.4. Sử dụng Require_once và include_once Hai hàm này làm việc nhƣ require và include. Chỉ khác là 2 hàm _once này sẽ kiểm tra xem file muốn nạp đã đƣợc nạp trƣớc đó chƣa. Nếu có rồi thì sẽ không nạp lại lần nữa. require_once và include_once giúp đảm bảo chúng ta chỉ include một file một lần duy nhất. Dƣới đây là trƣờng hợp nếu include/require nhiều lần, cùng 1 file sẽ gây ra lỗi. function xuatThongBao() { echo "Xin chào"; } Trong file .php ở trên chúng ta có một khai báo hàm. Việc chúng ta include file này hai lần sẽ đồng nghĩa với việc khai báo hàm xuatThongBao() 2 lần. Nếu chúng ta khai báo 2 hàm cùng một tên thì PHP sẽ đƣa ra thông báo lỗi dạng Fatal. Đó chính là lý do dùng require_once và include_once. 2.9. Câu lệnh rẽ nhánh 2.9.1. Câu lệnh if else 1) Câu lệnh if Cú pháp nhƣ sau: if ($bieuthuc){ // Các Câu Lệnh } Ví dụ: Chƣơng trình kiểm tra một số chẵn hay lẻ $so_can_kiem_tra = 12; $so_du = $so_can_kiem_tra % 2; 67
  75. if ($so_du == 0){ echo 'Số '.$so_can_kiem_tra.' Là Số Chẵn'; } 2) Câu lệnh if else Cú pháp nhƣ sau: if ($bieuthuc){ // Những Câu Lệnh 1; } else{ // Những câu lệnh 2; } - Nếu $bieuthuc đúng thì Những Câu Lệnh 1 sẽ đƣợc thực hiện và Những Câu Lệnh 2 sẽ không đƣợc thực hiện. - Ngƣợc lại thì nó sẽ không cần kiểm tra nữa và thực hiện Những Câu Lệnh 2. Ví dụ: kiểm tra năm nay là năm chẵn hay năm lẽ, xuất ra màn hình kết quả chẵn hay lẽ. $nam = 2014; $so_du = $nam % 2; if ($so_du == 0){ echo 'Năm ' . $nam . ' Là Năm Chẵn'; } else{ echo 'Năm ' . $nam . ' Là Năm Lẻ'; } 3) Kết hợp nhiều câu lệnh if else Trong thực tế không phải lúc nào cũng chỉ có 2 điều kiện mà sẽ có hàng chục điều kiện khác nhau, lúc này ta phải kết hợp giữa 2 lệnh if và else để xử lý. Ví dụ: Nhập vào một màu và kiểm tra: - Nếu là màu xanh thì xuất ra màn hình dòng chữ “Đây Là Màu Xanh”. - Nếu là màu đỏ thì xuất ra dòng chữ “Đây là màu đỏ”. - Nếu là màu vàng thì xuất ra dòng chữ “Đây là màu vàng”. - Các màu còn lại thì xuất ra dòng chữ “Các màu khác”. $mau = 'màu xanh'; if ($mau == 'màu xanh'){ echo 'Đây là màu xanh'; } else if ($mau == 'màu đỏ'){ echo "Đây là màu đỏ"; } 68
  76. else if ($mau == 'màu vàng'){ echo 'Đây là màu vàng'; } else{ echo 'Các màu khác'; } 4) Câu lệnh if else lồng nhau Cú pháp nhƣ sau: if ($bieu_thuc_cha){ // Các câu lệnh thuộc về biểu thức cha; if ($bieu_thuc_con){ // Các câu lệnh thuộc về biểu thức con; } } Ví dụ: Kiểm tra sô nhập vào có phải là số chẵn hay không? Nếu là số chẵn thì kiểm tra tiếp số đó có lớn hơn100 hay không, nếu lớn hơn 100 thì xuất ra màn hình “Số chẵn và lớn hơn 100″, ngƣợc lại xuất ra màn hình “Số chẵn và nhỏ hơn 100″. $so = 80; // Nhập vào số 80 if ($so % 2 == 0) // Nếu số dư khi chia cho 2 = 0 { if ($so > 100){ // Nếu số lớn hơn 100 thì chạy lệnh bên trong echo 'Số chẵn và lớn hơn 100'; } else if ($so < 100){ // Ngược lại nếu số nhỏ hơn 100 thì chạy lệnh bên trong echo 'Số chẵn và nhỏ hơn 100'; } } 2.9.2. Câu lệnh switch case 1) Câu lệnh Switch Câu lệnh switch trong php cho phép đƣa ra quyết định có nhiều cách lựa chọn để giá trị của biểu thức truyền vào. Nếu giá trị biểu thức truyền vào trùng với các giá trị biểu thức điều kiện thì các câu lệnh bên trong biểu thức điều kiện sẽ đƣợc thực hiện. Cú pháp nhƣ sau: switch ($variable) { case $value_1: // chuỗi câu lênh break; 69
  77. case $value_2: // chuỗi câu lệnh break; default: // chuỗi câu lệnh break; } Trong đó lệnh switch, case và default là các từ khóa trong PHP. Các chuỗi câu lệnh có thể là lệnh đơn (1 lệnh) hoặc lệnh ghép (kết hợp nhiều lệnh) và không cần đặt trong cặp dấu ngoặc nhọn {}. Ở mỗi dòng lệnh lựa chọn (case) nó sẽ so sánh xem biến truyền vào $variable có bằng với biến điều kiện $value_1, $value_2 hay không, nếu trùng với case nào thì những câu lệnh bên trong case đó sẽ đƣợc thực hiện, đồng thời dòng lệnh break sẽ kết thúc câu lệnh switch. Nếu không có lựa chọn (case) nào đúng thì mặc định nó sẽ chạy vào chuỗi dòng lệnh trong default, lệnh default trong mệnh đề rẻ nhánh switch có thể có hoặc không. Giá trị ở case chỉ chấp nhận các kiễu dữ liệu string, INT, boolean, null, float hoặc là một biểu thức có kết quả trả về một trong năm loại dữ liệu đó và toán tử quan hệ so sánh trong switch luôn luôn là ==. Ví dụ: Viết chƣơng nhập vào một số, dùng lệnh switch kiểm tra số đó: $number = 1; switch ($number){ case 0 : echo 'Số không'; break; case 1: echo 'Số một'; break; case 2: echo 'Số hai'; break; case 3: echo 'Số ba'; break; case 4 : echo 'Số bốn'; break; default: 70
  78. echo 'Không tìm thấy'; break; } 2) Switch lồng nhau Cũng nhƣ lệnh if, lệnh switch cũng có thể lồng nhau. $number = 12; $midle = null; switch ($number){ case 12 : // nếu $number = 12 $midle = $number % 2; // lấy số dư switch ($midle) { case 0 : // nếu số dư = 0 echo 'Số chẵn'; break; default : echo 'Số lẽ'; break; } break; default: // nếu không phải 12 thì không làm gì break; } 2.10. Các cấu trúc lặp 2.10.1. Lệnh for 1) Vòng lặp for Cú pháp: for($bien_dieu_khien;$bieu_thuc_dieu_kien;$bieu_thuc_thay_doi_bien_dieu_khien) { // lệnh } - $bien_dieu_khien: là một câu lệnh gán giá trị ban đầu cho biến điều khiển trƣớc khi thực hiên vòng lặp, hoặc là một biến có giá trị sẵn mà ta đã truyền vào cho nó trƣớc khi tạo vòng lặp này, lệnh này đƣợc thực hiện duy nhất một lần. - $bieu_thuc_dieu_kien: là một biểu thức quan hệ xác định điều kiện thoát khỏi vòng lặp. 71
  79. - $bieu_thuc_thay_doi_bien_dieu_khien: Xác định biến điều khiển sẽ bị thay đổi nhƣ thế nào sau mỗi lần lặp đƣợc lặp lại (thƣờng là tăng hoặc giảm giá trị của biến điều khiển). Ba biểu thức trên đƣợc cách nhau bởi dấu chấm phẩy, vòng lặp sẽ lặp khi biểu thức điều kiện đúng, khi biểu thức điều kiện sai thì vòng lặp sẽ dừng và thoát, và ta sử dụng các toán tử quan hệ và toán tử logic trong các biểu thức điều kiện để điều khiển vòng lặp. Ví dụ: for ($i = 0; $i = $i; $j ) { echo $j; } echo ' ';; } 2.10.2. Lệnh foreach Cấu trúc này đơn giản tạo ra một cách dễ dàng để duyệt qua các mảng. Có hai cú pháp; cú pháp thứ hai là thứ yếu nhƣng là sự mở rộng một cách hữu ích của cấu trúc thứ nhất: foreach(array_expression as $value) statement foreach(array_expression as $key => $value) statement Dạng đầu tiên của các vòng lặp trên mảng đƣợc đƣa ra bởi array_expression. Trên mỗi vòng lặp, giá trị của các phần tử hiện tại đƣợc gán cho $value và con trỏ mảng cục bộ đƣợc tăng lên một (bởi vậy trong vòng lặp sau, ta sẽ thấy phần tử tiếp theo). Dạng thứ hai cũng thực hiện việc tƣơng tự, từ khoá của phần tử hiện tại sẽ đƣợc gán tới biến $key trên mỗi vòng lặp. 72
  80. Chú ý: - Khi foreach lần đầu tiên bắt đầu thực hiện, con trỏ cục bộ tự động đƣợc điều chỉnh lại tới phần tử đầu tiên của mảng . Điều này có nghĩa là ta không cần gọi hàm reset() trƣớc mỗi vòng lặp foreach. - foreach thao tác trên một bản sao chép của mảng đƣợc chỉ ra, không phải là chính mảng đó. Do vậy, con trỏ mảng không bị thay đổi giống nhƣ mỗi cấu trúc. Ta phải chú ý rằng các ví dụ sau có cùng một chức năng nhƣ nhau: reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value \n"; } foreach ($arr as $value) { echo "Value: $value \n"; } Sau đây cũng có chức năng tƣơng tự: reset ($arr); while (list($key, $value) = each ($arr)) { echo "Key: $key; Value: $value \n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value \n"; } Một số ví dụ để mô tả cách sử dụng: /* foreach example 1: value only */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Current value of \$a: $v.\n"; } /* foreach example 2: value (with key printed for illustration) */ $a = array (1, 2, 3, 17); $i = 0; /* for illustrative purposes only */ foreach($a as $v) { print "\$a[$i] => $v.\n"; } /* foreach example 3: key and value */ $a = array ( "one" => 1, 73
  81. "two" => 2, "three" => 3, "seventeen" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } 2.10.3. Lệnh while Cú pháp: while ($condition) { // dòng lệnh } Trong đó $condition là điều kiện để dừng (lặp) vòng lặp. Nếu $condition có giá trị false thì vòng lặp kết thúc, ngƣợc lại vòng lặp sẽ tiếp tục lặp, vòng lặp while sẽ lặp vô hạn nếu biểu thức điều kiện truyền vào luôn luôn đúng Ví dụ: $i = 1; // Biến dùng để lặp while ($i <= 10){ // Nếu $i <= 10 thì mới lặp echo $i . ' - '; // Xuất ra màn hình $i++; // Tăng biến $i lên 1 } 2.10.4. Lệnh do while Vòng lặp while sẽ kiểm tra điều kiện trƣớc rồi thực hiện câu lệnh bên trong vòng lặp, còn vòng lặp do while thì ngƣợc lại sẽ thực hiện câu lệnh bên trong vòng lặp trƣớc rồi mới kiểm tra điều kiện, nếu điều kiện đúng thì sẽ thực hiện tiếp vòng lặp kế tiếp, nếu điều kiện sau thì sẽ dừng vòng lặp. Vòng lặp do while trong php luôn luôn thực hiện 1 lần lặp (vì nó thực hiện trƣớc rồi mới kiểm tra điều kiện). Cú pháp: do { // dòng lệnh } while ($condition); Ví dụ: $i = 1; do{ echo $i; $i++; }while ($i <= 10); 74
  82. 2.10.5. Lệnh break, continue, goto, die, exit 1) Câu Lệnh Break Thƣờng đƣợc dùng để dừng và thoát khỏi vòng lặp cho dù vòng lặp vẫn chƣa kết thúc. Ví dụ: for ($i = 1; $i <= 100; $i++) { echo $i . ' '; if ($i == 20) { break; } } Trong ví dụ này thì vòng lặp đƣợc lặp từ 1 cho tới 100, nhƣng nó không chạy hết 100 lần bởi vì khi nó chạy tới lần thứ 20 (tức là biến $i = 20) thì câu lệnh kiểm tra if đúng nên lệnh break bên trong câu if đƣợc thực hiện và sẽ dừng vòng lặp. Không chỉ ở vòng lặp for mà các vòng lặp nhƣ while và do while, vòng lặp foreach ta đều có thể dùng lệnh break để kết thúc. 2) Câu Lệnh Continue Dịch ra tiếng anh cũng đủ hiểu phần nào câu lệnh này, lệnh tiếp tục (continue) sẽ bỏ qua những đoạn code bên dƣới nó và thực hiện vòng lặp kế tiếp (không thoát hẳn vòng lặp nhƣ lệnh break). Ví dụ: for ($i = 1; $i <= 10; $i++) { if ($i == 5) { continue; } echo $i . ' '; } Bài này vòng lặp for lặp từ 1 tới 10 và in ra các số đó. nhƣng lạ thay là kết quả thiếu mất số 5 tại vì khi $i = 5 (vòng lặp thứ 5) thì câu lệnh continue đc thực hiện nên nó sẽ bỏ qua những đoạn code bên dƣới nó ( và bên trong vòng lặp) để lặp vòng tiếp theo nên lệnh echo $i không đƣợc thực hiện. Tƣơng tự ta có thể sử dụng lệnh này cho tất cả các vòng lặp for, while, do while và foreach. 75
  83. 3) Câu Lệnh Goto Dùng để nhảy đến một dòng code nào đó. Ví dụ: $a = 12; $b = 13; $c = $a + $b; echo $a; goto label_end; echo $b; label_end; Trong ví dụ này nếu bình thƣờng thì nó sẽ xuất ra màn hình cả $a và $b nhƣng bài này nó chỉ xuất ra màn hình mỗi $a vì dòng goto label_end sẽ nhảy chƣơng trình đến cái nhãn label_end nên dòng echo $b; không đƣợc thực hiện. label_end đƣợc gọi là nhãn (có thể đặt tên bất kỳ). Ngƣời ta khuyên rằng không nên sử dụng lệnh goto bởi vì nó khó nhìn, lộn xộn khó bảo trì nâng cấp. 4) Lênh die và exit Với hai lệnh break và continue chỉ ảnh hƣơng trong vòng lặp thì lệnh die và exit lại ảnh hƣởng tới cả chƣơng trình, nếu dùng 2 lệnh này thì chƣơng trình sẽ dừng ngay lập tức và những đoạn code bên dƣới die và exit sẽ không đƣợc thực hiện. Ví dụ: echo '123'; die(); // hoặc exit(); echo '456'; Trong ví dụ này kết quả xuất ra màn hình là 123, vởi vì dòng code echo ‟456′ không đƣợc thực hiện. 2.11. Lập trình hƣớng đối tƣợng 2.11.1. Khái niệm về lập trình hƣớng đối tƣợng 1) Đối tƣợng Đối tƣợng là những sự vật, sự việc mà nó có những tính chất, đặc tính, hành động giống nhau và ta gom góp lại thành đối tƣợng. Đối tƣợng ta không thể đếm đƣợc vì nó chỉ là hình tƣợng đại diện cho một nhóm cá thể, nhƣng thể hiện của đối tƣợng thì ta đếm đƣợc. Ví dụ đối tƣợng học sinh ta không đếm đƣợc vì nó chỉ là định danh cho những học sinh nhƣng 7 đối tƣợng học sinh thì lại đếm đƣợc vì 7 con ngƣời này là hình tƣợng thể hiện cho đối tƣợng học sinh Ta có thể tự định nghĩa những đối tƣợng không có thật để giải quyết bài toán, ví dụ nhƣ đối tƣợng ngƣời ngoài hành tinh, Ví dụ: 76
  84. - Động vật ta có thể ghép chúng thành một đối tƣợng vì chúng có các đặc tính nhƣ mắt, mũi, chân, tay , và các hành động nhƣ đi, ăn, uống nƣớc, Mỗi con vật nhƣ chó, mèo là một thể hiện của đối tƣợng động vật. - Nhà là một đối tƣợng vì nhà có các đặc tính chiều cao, mặt trƣớc, mặt sau, và có các hành động xây nhà, xập nhà Mỗi ngôi nhà là một thể hiện của đối tƣợng Nhà. - Sinh viên là một đối tƣợng vì sinh viên có các đặc tính nhƣ tên, điểm thi, mã sinh viên và những hành động nhƣ đi thi, điểm danh, Mỗi sinh viên là một thể hiện của đối tƣợng Sinh viên. - Xe đạp là một đối tƣợng vì xe đạp có các đặc tính nhƣ bánh xe, xăm xe, lốp xe và có những hành động nhƣ chạy, dừng, . Mỗi chiếc xe đạp là một thể hiện của xe đạp. 2) Lập trình hƣớng đối tƣợng Lập trình hƣớng đối tƣợng là lập trình hỗ trợ công nghệ đối tƣợng (OOP) giúp tăng năng xuất và đơn giản hóa công việc xây dựng phần mềm, bảo trì phần mềm. Cho phép lập trình viên tập trung vào các đối tƣợng giống nhƣ trong thực tế. Có một vài ý kiến cho rằng lập trình hƣớng đối tƣợng dễ tiếp thu cho những ngƣời mới bắt đầu vì nó rất giống với thực tế, nhƣng phải nắm các phƣơng pháp lập trình truyền thống thì lúc qua lập trình hƣớng đối tƣợng sẽ rất dễ. 2.11.2. Lớp, thuộc tính, phƣơng thức của đối tƣợng 1) Lớp (Class) Nhƣ ta đã biết đối tƣợng là những sự vật, sự việc mà nó có những tính chất, hành động giống nhau, vậy thì lớp (class) có thể đƣợc ví nhƣ là một mẩu mô tả trạng thái, hành động của đối tƣợng đó. Cú pháp: class className{ // Các khai báo bên trong } Ví dụ: Khai báo lớp sinh viên (lớp này đại diện cho đối tƣợng sinh viên) class sinhvien{ // Các khai báo bên trong } 2) Thuộc tính của lớp Thuộc tính của lớp chính là thuộc tính của đối tƣợng mà lớp đó mô tả, ví dụ đối tƣợng động vật có những thuộc tính nhƣ: mắt, mũi, tai, chân thì những thứ đó cũng chính là thuộc tính của lớp động vật. Cú pháp: class tenLop{ var $tenthuoctinh; 77
  85. } Trong đó: var $tenthuoctinh chính là cách khai báo thuộc tính cho lớp. Ví dụ: Đối tƣợng động vật có các thuộc tính nhƣ mắt, mũi, tai, chân, hãy khai báo lớp động vật và các thuộc tính của lớp đó. class DongVat{ var $mat; var $mui; var $tay; var $chan; } 3) Phƣơng thức của lớp Phƣơng thức của lớp chính là phƣơng thức của đối tƣợng, đó là những hành động (hành vi) của đối tƣợng. Ví dụ đối tƣợng động vật có các hành động nhƣ ăn, sủa, chạy Các phƣơng thức giống với hàm nên nó cũng có các tính chất nhƣ hàm đó chỉ khác là phƣơng thức nằm trong một lớp đối tƣợng và muốn gọi đến nó thì phải thông qua lớp đối tƣợng này. Cú Pháp: class ClassName{ function tenPhuongThuc($bien){ // các lệnh bên trong } } Trong đó tenPhuongThuc chính là tên phƣơng thức mình muốn tạo. Ví dụ: Đối tƣợng động vật có các thuộc tính nhƣ mắt, mũi, tai, chân, và các hành động nhƣ ăn, đi, chạy hãy khai báo lớp động vật và các thuộc tính, phƣơng thức của lớp đó. class DongVat{ // Các thuộc tính var $mat; var $mui; var $tay; var $chan; // Các phương thức function an($thuc_an){ // lệnh } function di(){ 78
  86. // lệnh } function chay(){ // lệnh } } 4) Khởi tạo, gán và gọi thuộc tính và phƣơng thức . Khởi tạo lớp (đối tƣợng) mới Hãy phân biệt khởi tạo đối tƣợng và khai báo đối tƣợng, khai báo đối tƣợng là ta tạo một lớp (class) của đối tƣợng đó, còn khởi tạo đối tƣợng là ta tạo một hình tƣợng của lớp (đối tƣợng) mà ta đã khai báo. Vì lớp mô phỏng cho đối tƣợng nên sẽ dùng từ lớp thay cho đối tƣợng luôn. Cú pháp: $ten_bien = new ClassName(); Ví dụ: // Khai báo Lớp (đối tượng) Động Vật class DongVat{ // Các thuộc tính var $mat; var $mui; var $tay; var $chan; // Các phương thức function an($thuc_an){ // lệnh } function sua(){ // lệnh } function chay(){ // lệnh } } // Khởi tạo lớp động vật mới $conheo = new DongVat(); $conbo = new DongVat(); $conga = new DongVat(); 79
  87. . Truy xuất đến các thuộc tính của đối tƣợng Để truy xuất đến các thuộc tính của đối tƣợng ta dùng toán tử (->) để trỏ đến. Cú pháp nhƣ sau: $classname->method Ví dụ: // Khởi tạo lớp động vật mới $conheo = new DongVat($thuc_an); // Gán giá trị cho các thuộc tính của đối tượng $conheo $conheo->mat = 'Mắt 2 mí'; $conheo->mui = 'Mũi tây phương'; // Lấy các giá trị và xuất ra màn hình echo $conheo->mat; // kết quả xuất ra màn hình "Mắt 2 mí" echo $conheo->mui ;// kết quả xuất ra màn hình "Mũi tây phương" . Gọi các phƣơng thức (hàm) của đối tƣợng Cũng tƣơng tự nhƣ truy xuất đến các thuộc tính của đối tƣợng, ta dùng toán tử (->) để gọi các hàm trong đối tƣợng. Cú pháp nhƣ sau: $classname->function(); Ví dụ: class DongVat { // Các phương thức function an($thuc_an){ echo 'Hôm Nay Ăn Món ' . $thuc_an; } } // Khởi tạo lớp động vật mới $conheo = new DongVat(); // Gọi đến hàm ăn $conheo->an('Cám'); // kết quả là "Hôm Nay Ăn Món Cám" Ta thấy nó cũng giống nhƣ cách gọi hàm. Hàm trong đối tƣợng gọi đến các thuộc tính của chính mình bằng cú pháp sau: $this->ten_thuoc_tinh; Ví dụ: class DongVat { var $hello = 'Xin chào các bạn, Tôi đang ăn nhé'; // Các phương thức 80
  88. // hàm (hành động) ăn function an(){ echo $this->hello; } } // Khởi tạo lớp động vật mới $conheo = new DongVat(); // Gọi đến hàm ăn $conheo->an(); // kết quả "Xin chào các s , Tôi đang ăn nhé" 2.11.3 Trừu tƣợng hóa dữ liệu Trừu tƣợng hóa là quá trình đơn giản hóa một đối tƣợng mà trong đó chỉ bao gồm những đặc điểm quan tâm và bỏ qua những đặc điểm chi tiết nhỏ. Quá trình trừu tƣợng hóa dữ liệu giúp ta xác định đƣợc những thuộc tính, hành động nào của đối tƣợng cần thiết sử dụng cho chƣơng trình. Trừu tƣợng hóa dữ liệu là quá trình trừu tƣợng hóa một đối tƣợng một cách đủ thông tin để lƣu vào hệ thống dữ liệu. Quá trình này giống với bộ phận phân tích hệ thống dữ liệu, lấy thông tin của khách hàng và trừu tƣợng hóa để đƣa vào cơ sở dữ liệu. Hình 2.15. Trừu tượng hoá dữ liệu Ví dụ: Xây dựng chƣơng trình quản lý sinh viên Đối tượng: Các sinh viên. Dữ liệu: - Họ Tên - Ngày Sinh - Giới Tính - Địa Chỉ - Học Lớp - 81