1. access modifier
1.1. là các từ khóa được sử dụng để quy định mức độ truy cập đến lớp và các thành phần lớp
1.2. public có thể truy cập từ bất cứ đâu
1.3. private các phương thức và thuộc tính chỉ được phép truy xuất trong cung 1 lớp
1.4. protected các phương thức và thuộc tính được phép truy xuất trong cùng 1 lớp và ở lớp con kế thừa
2. Hàm
2.1. Thân hàm
2.2. là một khối lệnh thực hiện 1 nhiệm vụ nhất định
2.3. có thể sử dụng lặp đi lặp lại nhiều lần
2.4. không được thực thi ngay tức thì khi nạp trang php
2.5. chỉ thực thi khi được gọi hàm
2.6. khai báo hàm
2.6.1. Tên hàm
2.6.1.1. phải bắt đầu bằng ký tự chữ hoặc dấu gạch dưới
2.6.1.2. không phân biệt chữ hoa và chữ thường
2.6.1.3. nên đặt tên hàm có ý nghĩa
2.6.2. Tham số đầu vào
2.6.2.1. là cơ chế truyền dữ liệu đầu vào vào cho hàm
2.6.2.2. tham số giống như 1 biến
2.6.2.3. có thể truyền 1 hoặc nhiều tham số vào hàm
2.6.2.4. các tham số cách nhau bởi dấu phẩy (,)
2.6.2.5. các tham số được đặt trong () sau tên hàm
2.6.2.6. giá trị
2.6.2.6.1. có thể quy định giá trị mặc định của tham số. khi gọi hàm mà không truyền giá trị vào cho tham số đó thì giá trị mặc định được sử dụng
2.6.2.6.2. trả về
3. mảng
3.1. mảng đa chiều
3.1.1. là mảng có các phần tử là mảng
3.1.2. có thể có mảng 2 chiều 3 chiều hoặc nhiều hơn
3.1.3. thì cần nhiều chỉ số để truy xuất đến 1 phần tử
3.1.4. duyêt mảng
3.1.4.1. sử dụng các vòng lặp lồng nhau để duyệt qua tất cả các phần tử của mảng nhiều chiều
3.2. $array
3.2.1. indexarrays
3.2.1.1. mảng 1 chiều với 1 chỉ số
3.2.2. assocltivearrays
3.2.2.1. màng 1 chiều với chỉ số là 1 từ khóa
3.2.3. multidimenslonalalarrays
3.2.4. count() trả về độ dài của mảng
3.2.5. for và foreach để duyệt mang
3.3. là cơ chế giúp lưu trữ nhiều giá trị trong cùng 1 biến
3.4. các giá trị được lưu trong mảng thương là cung loại
3.5. khái niệm
3.5.1. tên mảng tuân thủ các quy tắc như tên biến
3.5.2. phần tử mảng : từng giá trị của mảng
3.5.3. độ dài mảng : số lượng phần tử của mảng
3.5.4. chỉ số : vị trí của các phần tử trong mảng
4. oop
4.1. static
4.1.1. được sử dụng để khai báo các thuộc tính và phương thức của lớp
4.1.2. các thành phần static trực thuộc lớp thay vi trực thuộc đối tượng
4.1.3. biến static còn được gọi là biến của lớp
4.1.4. phương thức static còn được gọi là phương thức của lớp
4.1.5. truy xuất các thành phần static bằng cách sử dụng lớp hoặc đối tượng
4.1.6. không cần khởi tạo vẫn có thể sử dụng các thành phần static
4.2. setter
4.3. getter
4.4. kế thừa
4.4.1. là cơ chế cho phép lớp con sử dụng lại các đặc điểm và hành vi đã được định nghĩa trong lớp cha
4.4.2. quan hệ lớp con với lớp cha là is-a
4.4.3. khái niệm
4.4.3.1. lớp được kế thừa gọi là lớp cha
4.4.3.2. lớp kế thừa gọi là lớp con
4.4.3.2.1. lớp con kế thừa tất cả thành phần của lớp cha ngoại trừ các thành phần khai báo private
4.4.3.2.2. lớp con có thể gọi constructor của lớp cha
4.4.3.2.3. lớp con có thể định nghĩa thêm các thuộc tính và phương thức mới
4.4.4. một số dạng kế thừa
4.4.4.1. single 1 lớp con kế thừa chỉ 1 lớp cha
4.4.4.2. multilevel 1 lớp con kế thừa từ 1 lóp cha, lớp cha lại kế thừa 1 lớp khác trên nó
4.4.4.3. hierarchical 1 lớp cha có nhiều lớp con với nhiều level khác nhau
4.4.5. cú pháp kế thừa
4.4.5.1. từ khóa extends được sử dụng dể kế thừa 1 lớp
4.4.6. method overriding (ghi đè phương thức )
4.4.6.1. là cơ chế cho phép lớp con định nghĩa lại các phương thức ở lớp cha
4.4.6.2. phương thức override ở lớp con có cùng tên cung danh sách tham số và kiểu dữ liệu trả về so với phương thức ở lớp cha
4.4.6.3. phương thức ở lớp con phải có access modifier có level bắng và cao hơn lớp cha
4.4.7. parent
4.4.7.1. được sử dụng trong 1 lớp con đẻ truy xuất các thuộc tính và phương thức lớp cha
4.4.7.2. parent::__construct được sử dụng trong lớp con để gọi đến constructor của lớp cha
4.4.8. final
4.4.8.1. được sử dụng với class hoặc method
4.4.8.2. với class ngăn chặn việc kế thừa 1 lớp
4.4.8.3. với method ngăn chặn việc ghi đè 1 phương thức
4.4.8.4. final class không thể là abstract class
4.5. là đơn vị thực thi cơ bản trong ngôn ngữ php, quy định hình thức và các khả năng của các đối tượng
4.6. constructor là 1 phương thức đặc biệt được sử dụng để khởi tạo các đối tượng của 1 lớp
4.7. đặt tên
4.7.1. tên lớp nên là 1 danh từ
4.7.2. tuân theo quy tắc Camel
4.7.3. nên đơn giản có nghĩa
4.7.4. không trùng với các từ khóa trong php
4.7.5. không được bắt đầu bằng chữ số . Có thể bắt đầu bằng ký tự $ hoặc _
4.8. khởi tạo đối tượng
4.8.1. sử dụng từ khóa new để tạo dối tượng
4.9. khai báo thuộc tính
4.9.1. mô tả các đặc điểm của đối tượng
4.9.2. thuộc tính còn được gọi là biến của đối tượng (instance variable)
4.10. khai báo phương thức
4.10.1. mô tả hành vi mà đối tượng có thể thực hiện
4.10.2. phương thức còn được gọi là phương thức của đối tượng (instance method)
4.11. hàm tạo (constructor)
4.11.1. dùng để tạo và khởi tạo các trạng thái ban đầu cuả đối tượng. Mặc định sẽ có 1 hàm tạo không có đối số được thêm vào cho lớp
4.11.2. có thể lựa chọn các constructor khác nhau bằng cách truyền vào các tham số khác nhau
4.12. truy xuất thuộc tính
4.12.1. thông qua biến trỏ đến đối tượng
4.12.2. sử dụng toán tử -> để truy xuất thuộc tính đối tượng
4.13. gọi phương thức
4.13.1. sử dụng toán tử -> để gọi phương thức đối tượng
4.14. từ khóa this
4.14.1. được sử dụng để đại diện cho đối tượng hiện tại
4.14.2. có thể sử dụng từ khóa this để truy cập đến các thành phần của đối tượng hiện tại
4.15. khai báo lớp đồng thời cũng là khai báo 1 kiểu dữ liệu mới để có thể khởi tạo các đối tượng thuộc kiểu dữ liệu đó
5. clean code
5.1. mã sạch
5.2. dễ đọc
5.3. dễ cải tiến
5.4. dễ bảo trì
5.5. ít phụ thuộc
5.6. không trùng lặp
5.7. thể hiện rõ ý tưởng thiết kế
5.8. tại sao cần clean code
5.8.1. năng suất sẽ giảm theo thời gian nếu làm việc với mã nguồn không tốt
5.8.2. các yếu tố ảnh hưởng đến mã nguồn
5.8.2.1. định danh
5.8.2.2. phương thức
5.8.2.3. ghi chú
5.8.2.4. định dạng của mã nguồn
5.8.2.5. thiết kế kiến trúc
5.8.2.6. xử lý lỗi và ngoại lệ
5.8.2.7. test
5.9. đặt tên tốt
5.9.1. cần thể hiện rõ ý nghĩa của đối tượng mà nó đại diện
5.9.2. tránh gây hiểu lầm
5.9.3. có sự khác biệt rõ ràng giữa các tên
5.9.4. tên phát âm được
5.9.5. tên gọi có thể tìm kiếm được
5.9.6. không viết tắt hoặc mã hóa
5.9.7. sử dụng đúng ngữ nghĩa
5.9.8. đặt tên lớp
5.9.8.1. nên là danh từ
5.9.8.2. tránh dùng từ gần nghĩa
5.9.8.3. nên bắt đầu bằng chữ viết hoa
5.9.8.4. tuân theo quy tắc CamelCase
5.9.9. tên phương thức
5.9.9.1. là 1 động từ hoặc bắt đầu bằng 1 động từ
5.9.9.2. bắt đầu bằng chữ viết thường
5.9.9.3. tuân theo quy tắc camelCase
6. Refactoring( tái cấu trúc mã nguồn )
6.1. là các kỹ thuật cho phép chỉnh sửa mã nguồn nội bộ mà không làm thay đổi hành vi củ hệ thống đối với bên ngoài
6.2. mục đích
6.2.1. mã nguồn dễ duy trì hơn
6.2.2. mã nguồn dễ mở rộng hơn
6.3. đổi tên biến và phương thức
6.3.1. để trở nên tốt hơn
6.3.1.1. dễ đọc
6.3.1.2. có ý nghĩa
6.3.1.3. thể hiện được ý nghĩa
6.3.1.4. tuân thủ coding convention
6.3.2. lưu ý
6.3.2.1. đổi tên tại vị trí khai báo
6.3.2.2. đổi tên tại các vị trí có sử dụng tên biến hoặc phương thức
6.3.3. nên sử dụng tính năng của IDE để đổi tên biến và phương thức
6.4. tách biến
6.4.1. giúp đơn giản hóa các biểu thức và giúp dễ hiểu hơn
6.5. tách hằng
6.5.1. mang lại ý nghĩa cho các giá trị thần kỳ và mã nguồn dễ hiểu hơn
6.6. tách phương thức
6.6.1. giúp các phương thức dễ đọc dễ hiểu dễ kiểm soát hơn
7. stack
7.1. giống như là 1 ngăn xếp
7.2. hoạt động theo nguyên lý last-in/first-out (vào sau / re trước )
7.3. có thể dùng mảng hoặc là 1 linkedlist để lưu trữ phần tử
7.4. thao tác cơ bản
7.4.1. push() : lưu giữ 1 phần tử trên ngăn xếp
7.4.2. pop() : xóa 1 phần tử từ ngăn xếp
7.4.3. peek() : lấy phần tử dữ liệu của ngăn xếp mà không xóa phần tử này
7.4.4. isEmpty() : kiểm tra rỗng
7.4.5. isfull() : kiểm tra ngăn xếp đã đầy hay chưa
8. abstract class
8.1. là những lớp có tính trừu tượng rất cao đến mức không thể tạo được các đối tượng của lớp đó
8.2. tính chất
8.2.1. không thể tạo đối tượng của lóp abstract
8.2.2. lớp abstract có thể có các thuộc tính và phương thức bình thường
8.2.3. 1 lớp chứa phương thức abstract thì lớp đó phải là abstract
8.2.4. 1 lớp không phải là abstract kế thừa 1 lớp cha abstract thì phai implement tất cả các phương thức abstract của lớp cha
8.2.5. 1 lớp abstract kế thừa 1 lớp cha abstract có thể không implement các phương thức của lớp cha
8.2.6. lớp abstract không thể là final
8.2.7. phương thức abstract không thể là final
9. thuật toán sắp xếp
9.1. là qúa trình xử lý 1 danh sách các phần tử để đặt chúng theo thứ tự thỏa mãn 1 tiêu chuẩn nào đó dựa trên nội dung thông tin lưu giữ tại mỗi phần tử
9.2. thường xét trường hợp các phần tử cần sắp xếp các con số
9.3. một số thuật toán sắp xếp
9.3.1. sắp xếp nổi bọt
9.3.1.1. so sánh 2 phần tử kề nhau nếu chúng chưa đứng đúng thứ tự thì đổi chỗ cho nhau
9.3.1.2. có thể tiến hành từ trên xuống (từ trái sang ) từ dưới lên ( từ phải sang )
9.3.1.3. ưu điểm : code ngắn gọn nhất
9.3.1.4. nhược điểm : hiệu suất thấp nhất
9.3.2. sắp xếp chèn
9.3.2.1. thực hiện sắp xếp day số theo cách duyệt tưng phần tử và chèn từng phần tử đó vào đúng vị trí trong mảng con đã sắp xếp sao cho dãy số trong mảng đã sắp xếp đó đảm bảo tính chất của 1 dãy số tăng dần
9.3.2.2. ưu điểm : chạy nhanh khi mảng nhỏ hay được sắp xếp 1 phần
9.3.2.3. nhược điểm : hiệu suất thấp
9.3.3. sắp xếp chọn
9.3.3.1. là sắp xếp 1 mảng bằng cách đi tìm phần tử có giá trị nhỏ nhất trong đoạn đoạn chưa được sắp xếp và đổi phần tử nhỏ nhất đó với phần tử ở đâu đoạn chưa được sắp xếp
9.3.3.2. thuật toán sẽ chia lam 2 mảng con
9.3.3.3. ưu điểm :thuật toán chạy nhanh hơn khi mảng sắp xếp 1 phần
9.3.3.4. nhược điểm : hiệu suất không cao
9.3.4. sắp xếp vun đống
9.3.5. sắp xếp nhanh
9.4. s
10. xử ký ngoại lệ
10.1. ngoại lệ là các lỗi phát sinh trong quá trình thực thi
10.2. các lỗi xảy ra
10.2.1. lỗi cú pháp
10.2.1.1. là lỗi xảy ra tại thời gian biên dịch trong các ngôn ngữ chương trình truyền thống và tại thời gian biên dịch trong javascript
10.2.2. lỗi chạy chương trình
10.2.2.1. là lỗi xảy ra trong suốt quá trình thực thi
10.2.3. lỗi logic
10.2.3.1. là kiểu lỗi khó có thể tìm dấu vết xảy ra khi tạo 1 lỗi về tính logic mà điều khiến script không nhận được kết quả như mong muốn
10.2.3.2. khó nắm bắt được lỗi logic bởi vì nó phụ thuộc vào yêu cầu và kiểu logic đặt vào chương trình
10.3. try-catch
10.3.1. dùng để tách phần giải quyết lỗi ra khỏi phần có thể sinh lỗi
10.3.2. quy định các loại ngoại lệ được bắt tại mức thực thi hiện hành
10.3.3. mã liên quan đến thuật toán nằm trong khối try
10.3.4. mã giải quyết vấn đề nằm trong khối catch
10.4. finally
10.4.1. sẽ luôn thực hiện vô điều kiện sau try-catch
10.5. throw
10.5.1. dùng để ném các lỗi có sẵn hoặc người dùng nghĩ ra
10.6. ngoại lệ do người dùng tạo
10.6.1. phải tạo 1 lớp là lớp mở rộng của lớp Exception có sẵn và chúng ta có thể thêm hàm để xử lý
11. String
11.1. là 1 kiểu dữ liệu cơ bản trong php
11.2. là dãy liên tiếp các ký tự
11.3. chuỗi không có ký tự gọi là chuỗi rỗng
11.4. đươc bao quanh bởi nháy đơn hoặc nháy kép
11.5. toán tử chuỗi
11.5.1. trong php để nối hai hay nhiều chuỗi ta sử dụng toán tử dấu chấm
11.6. ký tự đặc biệt
11.6.1. là những ký tự mà khi nó được viết vào bên trong chuỗi sẽ có nguy cơ làm ảnh hưởng đến cú pháp chuỗi khiến câu lệnh bị lỗi
11.7. chỉ số của ký tự chuỗi
11.7.1. chuỗi được coi như là mảng của các ký tự vì vậy các ký tự trong chuỗi được thao tác như thao tác với các phần tử trong mảng chứa các tập ký tự
12. Biểu thức chính quy
12.1. thường được gọi là Regex hoặc Regexp
12.2. là thuật toán khớp mẫu mạnh mẽ có thể được thực hiện trong 1 biểu thức nó giúp tiết kiệm thời gian khi xây dựng web động
12.3. là 1 nhóm các ký tự ký hiệu nó được sử dụng để tìm kiếm văn bản (text)
12.4. là 1 mẫu nó tương đồng quy luật với 1 chuỗi từ trái qua phải
12.5. trong lập trình nó được dùng với hàm xử ký chuỗi xử lý văn bản với các tác vụ tìm và thay thế chuỗi kiểm tra tính hợp lệ dữ liệu
12.6. tại sao dùng biểu thức chính quy
12.6.1. đơn giản hoá việc xác định các mẫu dữ liệu trong chuỗi dữ liệu băng cách gọi 1 hàm duy nhất giúp tiết kiệm thời gian lập trình
12.6.2. khi xác định đầu input người dùng nhập
12.6.3. highlight từ khóa tìm kiếm
12.6.4. khi tạo mẫu html tùy chỉnh biểu thức chính quy được sử dụng để xác đình các tag và thay thế chung bắng dữ liệu thực tế
12.6.5. đặc biệt sử dụng biểu thức chinh quy tăng perpormance của chương trình
12.7. khai báo
12.7.1. để khai báo 1 chuỗi Regular Expression / Regex ta chỉ cần khai báo băng ký tự / và kết thúc bằng ký tự /
12.8. Các ký tự dùng trong biểu thức chính quy được gọi là metacharacters
12.9. các hàm
12.9.1. preg_match()
12.9.1.1. so khớp và lấy kết quả của việc so sánh chuỗi dựa vào biểu thức chính quy. Hàm trả về TRUE/FALSE
12.9.2. preg_match_all()
12.9.2.1. ũng tương tự hàm preg_match() ở trên , tuy nhiên hai hàm này khác nhau ở chỗ , hàm preg_match_all() sẽ trả về toàn bộ các giá trị được so sánh khớp, còn hàm preg_match() chỉ trả về giá trị đầu tiên được so sánh khớp.
12.9.3. preg_split()
12.9.3.1. để chia nhỏ chuỗi thành mảng chứa các chuỗi con.
12.9.4. preg_replace()
12.9.4.1. dùng để tìm kiếm và thay thế một chuỗi nào đó khớp với đoạn Regular Expression truyền vào.
13. Cơ sở dữ liệu
13.1. là nhóm dữ liệu có tổ chức
13.2. là cơ chế lưu trữ dữ liệu
13.3. có nhiều CSDL khác nhau
13.3.1. CSDL phân cấp
13.3.2. CSDL mạng
13.3.3. CSDL quan hệ......
13.4. CSDL quan hệ
13.4.1. la CSDL được xây dựng trên mô hình dữ liệu quan hệ
13.4.2. dữ liệu được tổ chức trong bảng còn được gọi là quan hệ
13.4.3. dòng được gọi là bản ghi hoặc hàng
13.4.4. cột được gọi là thuộc tính hoặc trường
13.4.5. 1 bảng thường lưu trữ dữ liệu của 1 loại thực thể nhất định
14. Dữ liệu
14.1. là các mô tả về sự vật hiện tượng sự kiện... được biễu diễn dưới dạng các tài liệu chữ số ảnh âm thanh ....
14.2. dữ liệu rất hữu ích
14.3. việc lưu trữ dữ liệu là rất quan trọng
14.4. có nhiều cơ chế khác nhau để lưu trữ dữ liệu
14.5. khi xử lý dữ liệu thì chúng ta có được thông tin
14.6. dữ liệu và thông tin mang lại cho chúng ta tri thức
15. Hệ quản trị CSDL
15.1. là 1 ứng dụng máy tính được sử dụng để quản lý dữ liệu
15.2. còn được gọi là DBMS( database management system)
15.3. các chức năng của DBMS
15.3.1. định nghĩa dữ liệu ( definition)
15.3.2. cập nhập dữ liệu ( udate )
15.3.3. truy vấn dữ liệu ( retrieval )
15.3.4. quản lý dữ liệu ( administration) bảo mật theo dõi sao lưu.....
15.4. một số DBMS
15.4.1. mysql
15.4.2. mariadb
15.4.3. mongodb
15.4.4. sqlite
15.4.5. ibmdb2
15.4.6. oracledb
15.4.7. postgeresql
16. View
16.1. là 1 câu lệnh sql được lưu trữ trong CSDL với 1 tên xác định
16.2. là 1 thành phần của bảng dưới dạng truy truy vấn sql được xác định trước
16.3. 1 view có thể chứa tất cả các hàng của 1 bảng hoăc chọn các hàng từ bảng
16.4. 1 view có thể được tạo từ 1 hoặc nhiều bảng phụ thuộc vào truy vấn để tạo ra view
16.5. là 1 loại bảng ảo cho phép người dùng thực thi các câu lệnh sau
16.5.1. cấu trúc dữ liệu theo cách người dùng tìm thấy tự nhiên hoặc trực quan
16.5.2. hạn chế quyền truy cập vào dữ liệu theo cách mà người dùng có thể nhìn thấy và sửa đổi chính xác những gì mà họ cần
16.5.3. tóm tắt các bảng khác nhau có thể sử dụng để tạo báo cáo
16.6. ưu điểm của view
16.6.1. bảo mật thông qua quyền truy cập cá nhân
16.6.2. tùy biến việc hiển thị dữ liệu
16.6.3. kết hợp dữ liệu từ các bảng hay các view
16.6.4. các thao tác trên bản ghi
16.6.5. toàn vẹn ràng buộc kiểm tra
16.6.6. với người sử dụng cuối
16.6.6.1. dễ dàng hiểu được kết quả
16.6.6.2. dễ dàng thu được dữ liệu mong muốn
16.6.7. với nhà phát triển
16.6.7.1. dễ dàng hạn chế dữ liệu trả về
16.6.7.2. dễ dàng bảo trì ứng dụng
16.7. nhược điểm
16.7.1. khi truy vấn trong view sẽ chậm hơn trong table
16.7.2. bị phụ thuộc vaò table gốc nếu table gốc thay đổi cấu trúc thì phải thiết kế lại view sao cho phù hợp
16.8. phân loại view
16.8.1. standard view swr dụng các cột từ 1 hoặc nhiều bảng
16.8.2. indexed view được tạo chỉ mục unique clustered index
16.8.3. partitioned view được tạo bằng cách kết hợp dwx liệu đã được chia ra của các bảng từ 1 hoặc nhiều bảng
16.9. view hệ thống
16.9.1. các thuộc tính của1 đối tượng như bảng hay view được lưu trữ vào 1 bảng hệ thống đặc biệt là các siêu dữ liệu - metadata
16.9.2. siêu dữ liệu này gọi là khung nhìn hệ thống
16.9.3. các view hệ thống được chèn vào tự động trong CSDL do người dùng tạo
16.9.4. 1 số view hệ thống
16.9.4.1. catalog view
16.9.4.2. information schema views
16.9.4.3. compatibility views
16.9.4.4. replication views
16.9.4.5. dynamic management views
16.9.4.6. notification services views
16.10. hướng dẫn tạo view
16.10.1. view chỉ dược tạo trong CSDL hiện tại
16.10.2. 1 view có thể được xây dựng dựa vào các view khác và có thể lồng nhau tới 32 mức. Mỗi view có thể bao gồm tới 1024 cột
16.10.3. những giá tri mặc định những quy tắc và bẫy lỗi không thể được liên kết với view
16.10.4. câu truy vấn để khai báo với view khong thể bao gồm những mệnh đề OEDER BY, COMPUTE, COMPUTE BY , hoặc từ khóa INTO
16.11. tạo view
16.11.1. CREATE VIEW <view_name>[(columns list)] [with <view attributes>] AS <select_statement> [with check options]
16.12. sửa view
16.12.1. 1 view có thể sửa đổi bằng cách xóa và tạo mới lại hoặc sử dụng câu lệnh alter view
16.12.2. ALTER VIEW <view_name> AS <select statement> • Ví dụ: ALTER VIEW Salary_Details AS SELECT * FROM Employee_Details WHERE EmpID=1
16.13. xóa view
16.13.1. việc xóa 1 view không tác động đến các bảng cơ sở mà view tham chiếu đến
16.13.2. • Cú pháp: DROP VIEW <view_name> • Ví dụ: DROP VIEW Employee_Details
16.14. tùy chọn khi create view
16.14.1. tùy chọn check option
16.14.1.1. được sử dụng để đảm bảo rằng nếu muốn sửa đổi hoặc thêm dữ liệu thông qua view thì những dữ liệu đó phải thõa mãn tất cả điều kiện trong câu lệnh select khi định nghiã view
16.14.1.2. • Cú pháp: CREATE VIEW <view_name> AS <select statement> [WITH CHECK OPTION] • Ví dụ: CREATE VIEW CustDetail AS SELECT * FROM Customer WHERE City in (‘Hanoi’,‘Hai phong’, ‘HCM’) WITH CHECK OPTION; ➢ UPDATE CustDetail SET City=‘Quang Ninh’ WHERE CustID=‘c001’ ➢ not Execute
16.14.2. tùy chọn schemabinding
16.14.2.1. 1 view có thể được bao trong lược đồ của bảng cơ sở bằng cách sử dụng tuỳ chọn schemabinding
16.14.2.2. đảm bảo các bảng cơ sở có trong câu lệnh tạo view khong thể bị thay đổi khi nó có thể tác động đến phần định nghĩa view
16.14.2.3. • Cú pháp: CREATE VIEW <view name> WITH SCHEMABINDING AS <select statement> • Ví dụ: CREATE VIEW Cust WITH SCHEMABINDING AS SELECT * FROM dbo.Customer WHERE City IN (‘Hanoi’, ‘HP’); ➢ ALTER TABLE Customer ALTER COLUMN CustID varchar(7); ➢ Báo lỗi
16.15. tạo chỉ mục cho view
16.15.1. view phai có tùy chọn schemabinding
16.15.2. 1 view chỉ có 1 chỉ mục unique clustered index trên đó chỉ mục này phải được tạo trước sau đó có thể tạo thêm cá loại chỉ mục khác trên view
16.15.3. sau khi chỉ mục được tạo trên view nếu có bất kỳ sự thay đổi dữ liệu nào đều được tự động cập nhập lên chỉ mục
16.15.4. • Cú pháp: CREATE UNIQUE CLUSTERED INDEX <index_name> ON <view_name>(column_name,....
16.16. thao tác trên view
16.16.1. chỉ có thể isset và update vho view nếu
16.16.1.1. view khong có tùy chọn with check option
16.16.1.2. tất cả các cột dược chèn hay cập nhập phải thuộc về cùng 1 bảng cơ sở
16.16.1.3. không có tát cả các hàm sau avg, cuont, sum, min, max, grouping hoặc group by , union, distinct, top trong danh sách được chọn
16.17. issert view
16.17.1. các bộ dữ liệu có thể được chèn vào view bằng cách sử dụng câu lệnh issert
16.17.2. khi chèn vào trong view các bảng cơ sở được cập nhập cho phù hợp
16.17.3. Cú pháp: INSERT INTO <view_name>(col1, col2..) VALUES (value1, value2....
16.18. update
16.18.1. dữ liệu trong 1 hàng của view có thể được cập nhập bằng câu lệnh update
16.18.2. khi 1 view được cập nhập bảng cơ sở được cập nhập tương ứng
16.18.3. Cú pháp: UPDATE <view_name> SET column1=value1,.... WHERE <search_condition>
16.19. delete view
16.19.1. các hàng của view có thể xóa bằng cách sử dụng câu lệnh delete
16.19.2. khi các hàng được xóa trong view thì các hàng tương ứng cũng được xóa từ bảng cơ sở
16.19.3. Cú pháp: DELETE FROM <view_name> WHERE <search_condition>
17. Web & Web site
17.1. giao thức http là giao thưc truyền tải siêu văn bản
17.1.1. http request
17.1.2. http response
17.2. web server là một phần mềm /phần cứng để cung cấp các taì nguyên web
17.3. website
17.3.1. website tĩnh là các trang web mà nội dung củ nó không thay đổi. Những trang web tĩnh được viết bằng mã HTML thêm CSS , javascript để thêm hiệu ứng.
17.3.2. website động là website nội dung thay đổi sự thay đổi thùy theo thời gian tùy theo người dùng thùy theo ngữ cảnh. Thường sử dụng các ngôn ngữ phía server chẳng hạn như java,PHP,c#....và cơ sở dữ liệu
17.4. web là 1 không gian trên internet mà ở đó các tài liệu và các tài nguyên khác được chia sẻ dưới dạng ủl
17.5. website la tập hợp cá trang tài liệu và tài nguyên có liên quan đến nhau thường được truy cập qua một tên miền
17.6. LAMP là một bộ công nghệ được ưa chuộng và sử dụng phổ biến để xây dựng các ứng dụng web thông dụng
17.6.1. Linux là một họ các hệ điều hành mã nguồn mở
17.6.2. Aphache là phần mềm máy chủ dịch vụ web và miễn phí
17.6.3. MySQL là 1 hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở
17.6.4. PHP là 1 ngôn ngữ lập trình phía server
17.6.4.1. chức năng là xử lý yêu cầu của người dùng và sinh ra kết quả để trả về
17.6.5. tại sao nên sử dụng LAMP
17.6.5.1. các thành phần của LAMP đều là mã nguồn mở và miễn phí
17.6.5.2. cộng đồng sử dụng LAMP rất lớn
17.6.5.3. có nhiều các nền tảng (framework) thư viện (library) công cụ (tool)
17.6.5.4. các thành phần trong LAMP tương thích tốt vơi nhau và tuân theo các tiêu chuẩn của nghành
17.6.5.5. việc phát triển các ứng dụng LAMP khá nhanh chóng và dễ dàng
18. include && require
18.1. đều được sử dụng để nhúng trang php
18.2. điểm khác biệt
18.2.1. require sẽ tung ra lỗi nghiêm trọng ( E_COMPILE_EROR) và dừng thực thi
18.2.2. include sẽ tung ra cảnh cáo (E_WARNING) và tiếp tục thực thi
18.3. có thể nhúng trang php nhiều lần nếu được sử dụng nhiều nơi
18.4. include_once && require_once chỉ nhúng trang php duy nhất 1 lần
19. cấu trúc dữ liệu
19.1. là hình thức tổ chức 1nhoms dữ liệu
19.1.1. lưu trữ dữ liệu
19.1.2. cung cấp các phương thức để thao tác với dữ liệu
19.2. khái niệm
19.2.1. container: lớp chứa dữ liệu
19.2.2. Element: các phần tử dữ liệu
19.3. cấu trúc thông dụng
19.3.1. set : nhóm các phần tử không trùng nhau
19.3.2. array
19.3.3. list : nhóm các phần tử có thể trùng nhau
19.3.4. stack : nhóm các phần tử theo trật tự first-in/last-out (vào trước / ra sau )
19.3.5. queue : nhóm các phần tử theo trật tự first-in/ last-out ( vào trước / ra trước )
19.3.6. map : lưu trữ các cặp key/value
19.3.7. tree : lưu trữ theo mối quan hệ cha con
19.3.8. graph : lưu trữ theo mối quan hệ mạng lưới
19.4. ArrayLisst
19.4.1. là 1 danh sách
19.4.2. lưu trữ dữ liệu trong mảng
19.4.3. kích thước thay đổi được
19.4.4. truy xuất phần tử nhanh
19.4.5. thêm xóa phần tử chậm
19.4.6. thao tác cơ bản
19.4.6.1. get(): lấy về phần tử
19.4.6.2. add() : thêm 1 phần tử
19.4.6.3. remove(); xóa 1 phần tử
19.4.6.4. size() : lấy về số lượng phần tử
19.4.6.5. find(); tìm kiếm phần tử
19.4.6.6. isEmpty() : kiểm tra rỗng
19.5. LinkedLisst
19.5.1. các phần tử liên kết với nhau qua tham chiếu
19.5.2. truy xuất ngẫu nhiên chậm
19.5.3. thêm xóa phần tử nhanh
19.5.4. hoạt động trên cơ chế liên kết giữa các node . Mỗi node chứa dữ liệu của node đó và liên kết với node khác
19.5.5. singly linkedlisst
19.5.5.1. một node chỉ có 1 liên kết đến node phía sau nó. node cuối cùng trỏ về null
19.5.6. circular linkedlisst
19.5.6.1. node cuối cùng trỏ về node đầu tiên
19.5.7. doubly linkey list
19.5.7.1. một node chứa 2 liên kết trỏ đến phần tử trước và sau nó
19.5.7.2. phần tử phía trước của phần tử đầu tiên là null
19.5.7.3. phần tử phía sau của phần tử sau là null
19.5.8. circular doubly linkedlisst
19.5.8.1. node đầu tiên và node cuối cùng có liên kết trỏ đến nhau
20. sql- standard php library
20.1. sqlStack
20.1.1. cung cấp các chức năng chính của 1 stack được triển khai bằng cách sư dụng liên kết đôi
20.1.2. duyệt phần tử theo cơ chế LIFO IT_MODE_LIFO và IT_MODE_KEEP
20.1.3. kế thừa từ lớp Sqldoublylinkedlist nên được thừa kế tất cả các phương thức của lớp sqldoublylinkedlist
20.2. sqlqueue
20.2.1. cung cấp các chức năng chính của 1 hàng đợi queue, được triển khai bằng cách sử dụng danh sách liên kết đôi
20.2.2. duyệt các phần tử theo cơ chế FIFO
20.2.3. kế thừa từ lớp sqldoublylinkedlist nên được kế thừa tất cả các phương thức của lớp sqldoublylinkedlist
20.2.4. lưu ý: nếu chúng ta sử dụng push() và pop() thì hàng đợi sẽ hành xử như là 1 stack chứ không phải queue
20.3. là bộ thư viện chuẩn php cung cấp nhiều cấu trúc dữ liệu tiêu chuẩn trong các ứng dụng
20.4. một số cấu trúc dữ liệu như : doublylinkedlist, heaps, arrays, map
20.5. danh sách liên kết đôi là 1 danh sách có các node được liên kết với nhau theo cả 2 hướng
20.6. sqldoublylinkedlist
20.6.1. cung cấp các chức năng chính của một danh sách liên kết đôi
21. Queue
21.1. là một câu trúc dữ liệu trừu tượng, tương tự như hàng đợi trong đòi sống hàng ngày
21.2. tuân theo phương thức first-in/last-out ( vào trước / ra trước )
21.3. enqueue() : thêm 1 phần tử vào trong hàng đội
21.4. dequeue(): xóa 1 phần tử từ hàng đợi
21.5. peek(): lấy phần tử ở đầu hàng đợi mà không xóa phần tử này
21.6. isEmpty(): kiểm tra rỗng
21.7. isfull () : kiểm tra hàng đợi đầy hay chưa
22. tree
22.1. là một cấu trúc dữ liệu được sư dụng rộng rãi gồm các node được liên kết với nhau theo quan hệ cha con
22.2. khái niệm cơ bản
22.2.1. nút gốc
22.2.2. nút cha
22.2.3. nút con
22.2.4. nút lá
22.2.5. cây con
22.2.6. duyệt
23. php
23.1. Biến
23.1.1. cục bộ (local) sử dụng trong hàm
23.1.2. toàn cục (global) sử dụng ngoài hàm
23.1.2.1. có thể sử dụng từ khóa global để truy xuất biến toàn cục trong hàm. Có thể sử dụng mảng $_GLOBAL
23.1.3. tĩnh (static) giữ lại giá tri của biến cục bộ (local) mà không hủy đi
23.1.4. biến trong php bắt đầu bằng dấu $ tiêp theo là tên của biến
23.1.5. tên biến phải bắt đầu bằng 1 ký tự hoặc 1 dấu gạch dưới _
23.1.6. tên biến không thể bắt đầu bằng số
23.1.7. tên biến chỉ được bao gồm các ký tự chữ ký tự số và dấu gạch chân
23.1.8. tên biến phân biệt chữ hoa và chữ thường
23.1.9. biến có thể khai báo bất cứ đâu , vị trí khai báo biến quy định phạm vi mà biến đó có thể được sử dụng
23.2. Các kiểu dữ liệu
23.2.1. String(chuỗi)
23.2.2. integer( số nguyên)
23.2.3. Float(số thập phân)
23.2.4. Boolean(true/false)
23.2.5. Array(mảng)
23.2.6. Object( đối tượng )
23.2.7. NULL
23.2.8. Resource
23.3. toán tử
23.3.1. toán học(Arithmetic)
23.3.1.1. +,-,*,/,%
23.3.2. gán(Assignment)
23.3.2.1. =, -=, +=, *= , /=, %=
23.3.3. so sánh (Comparison)
23.3.3.1. == , ===, !=, >=, <=, <, >, <>, !==
23.3.4. tăng/ giamr( increment/decrement
23.3.4.1. ++, --
23.3.5. logic(logical)
23.3.5.1. &&, ||, !
23.3.6. string (chuỗi)
23.3.7. Array (mảng)
23.4. câu lệnh điều kiện
23.4.1. if
23.4.1.1. thực hiện câu lệnh nếu điều kiện là đúng
23.4.2. if.. else
23.4.2.1. Thực hiện một câu lệnh nếu điều kiện là đúng, còn nếu điều kiện sai thì thực hiện một câu lệnh khác
23.4.3. if ... elseif... else
23.4.3.1. Thực hiện các câu lệnh khác nhau với việc đánh giá nhiều hơn 2 điều kiện
23.4.4. switch .... case
23.4.4.1. Chọn thực hiện một hoặc nhiều câu lệnh tùy thuộc vào điều kiện
23.5. câu lệnh lặp
23.5.1. while
23.5.1.1. Kiểm tra điều kiện, nếu đúng thì thực hiện các câu lệnh, lặp lại các bước như thế.
23.5.2. do ... while
23.5.2.1. Thực hiện các câu lệnh, kiểm tra điều kiện, nếu đúng thì lặp lại các bước như thế.
23.5.3. for
23.5.3.1. Thực hiện lặp lại các câu lệnh trong một số lần nhất định
23.5.4. foreach
23.5.4.1. Thực hiện lặp lại các câu lệnh đối với từng phần tử của một mảng
24. log
24.1. error log ghi nhận các lỗi xảy ra
24.2. access ghi nhận các truy cập lên ứng dụng
24.3. vị trí lưu trữ log phụ thuộc vào hệ điều hành đang dùng webserver đang dùng và cấu hình của ứng dụng web
25. interface
25.1. là cấu trúc tương tự như lớp nhưng chỉ chứa hằng số và abstract method
25.2. quy định chung cho các lớp triển khai nó
25.3. sử dụng từ khóa interface để định nghĩa interface
25.4. tính chất
25.4.1. interface tạo ra 1 kiểu dữ liệu mới
25.4.2. không thể tạo đối tượng của interface
25.4.3. interface không thể chứa các phương thức không abstract
25.4.4. khi một lớp triển khai interface thì cần triển khai tất cả các phương thức được khai báo trong interface đó
25.4.5. interface có thể được thiết kế để khai báo cá phương thức chung cho các lớp không liên quan đến nhau
25.4.6. interface bổ sung cho việc java không hỗ trợ đa kế thừa
25.5. triển khai interface
25.5.1. 1 lớp triển khai interface bằng cách sử dụng từ khóa implements
25.5.2. 1 lớp có thể implements nhiều interface
25.6. kế thừa interface
25.6.1. 1 interface có thể kế thừa nhiều interface khác
25.6.2. interface con thừa hưởng các phương thức và hằng số được khai báo trong interface cha
25.6.3. interface con có thể khai báo thêm các thành phần mới
25.6.4. từ khóa extends được sử dụng để kế thừa interface
25.7. access modifier
25.7.1. mặc định là public
25.7.2. không cần thiết chỉ rõ access modifier của phương thức interface
25.8. khai báo hằng
25.8.1. có thể khai báo các hằng số trong interface
25.8.2. không cần thiết phải ghi rõ từ khóa final cho hằng số
25.8.3. không cân thiết chỉ rỏ access modifier cho hằng số
26. thuật toán tìm kiếm
26.1. tìm kiếm tuyến tính
26.1.1. mỗi phần tử được kiểm tra và nếu tìm thấy bất kỳ kết nối nào thì phần tử cụ thể đó được trả về nếu không tìm thấy thì quá trình tìm kiếm tiếp tục diễn ra cho tới khi tìm kiếm hết dữ liệu
26.2. tìm kiếm nhị phân
26.2.1. tìm kiếm 1 phần tử cụ thể bằng cách so sánh phần tử tại vị trí giữa nhất của tập dữ liệu
26.2.2. nếu tìm thấy kết nối thì chỉ mục của phần tử được trả về
26.2.3. nếu phần tử cần tìm là lớn hơn giá trị phần tử giữa thì phần tử cần tìm được tìm trong mảng con nằm bên phải phần tử giữa. nếu không thì tìm ở bên trái phần tử giữa, tiếp tục như vậy cho tới khi tìm hết mọi phần tử trên mảng con này
27. Sql
27.1. là viết tắt của cụm từ Structured Query Language ( ngôn ngữ truy vấn có cấu trúc )
27.2. được sử dụng để thao tác với các CSDL quan hệ
27.3. có nhiều phiên bản sql khác nhau mặc dù hầu hết đêu sử dụng chung cú pháp tuy nhiên cũng có 1 số khác biệt
27.4. các câu lệnh trong sql
27.4.1. thực thi các câu truy vấn
27.4.2. truy vấn dữ liệu từ csdl
27.4.3. thêm dữ liệu vào csdl
27.4.4. cập nhập dữ liệu trong csdl
27.4.5. xóa các bản ghi trong csdl
27.4.6. tạo csdl mới
27.4.7. tạo bảng trong csdl
27.4.8. xóa csdl
27.4.9. xóa bảng....
27.5. 1 số từ khóa quan trọng
27.5.1. SELECT
27.5.2. UPDATE
27.5.3. DELETE
27.5.4. INSERT
27.5.5. CREATE
27.5.6. ALTER
27.5.7. DROP
27.5.8. WHERE
28. Mysql
28.1. là 1 hệ quản trị CSDL quan hệ mã nguồn mở
28.2. có các phiên bản chạy được trên nhiều nền tangr:windows, linux, macos.....
28.3. mysql server: máy chủ dịch vụ quản trị
28.4. mysql client
28.4.1. ứng dụng cho phép kết nối và tương tác với mysql server
28.5. website chính thwcs: MySQL
29. PHPmyadmin
29.1. là công cụ mã nguồn mở miễn phí dành cho mysql và mariaDB
29.2. được viết bằng php
29.3. sử dụng phpmyadmin
29.3.1. nhập dữ liệu
29.3.2. xuất dữ liệu
29.3.3. tạo bảng
29.3.4. xóa bảng
29.3.5. chèn dữ liệu
29.3.6. xóa dữ liệu
29.3.7. cập nhập dữ liệu
29.3.8. lấy dữ liệu
30. Thiết kế và tạo cơ sở dữ liệu
30.1. phân tích và thiết cơ sở dữ liệu
30.1.1. là các thao tác được thực hiện để tìm ra1 mô hình CSDL trong 1 tình huống nhất định
30.1.2. kết quả của này là 1 bản thiết kế của csdl
30.1.3. dựa vào bản thiết kế của csdl chúng ta có thể viết các câu lệnh để tạo ra csdl đó
30.1.4. bản thiết kế csdl thường được biểu diễn dưới dạng 1 lưu đồ thực thể quan hệ
30.1.5. các bước phân tích và thiết kế cơ sở dữ liệu quan hệ
30.1.5.1. xác định mục tiêu của csdl
30.1.5.2. tìm hiểu và tổ chức các thông tin cân lưu trữ
30.1.5.3. phân chia thông tin vào trong các bảng
30.1.5.4. xác định trường dữ liệu cho từng bảng
30.1.5.5. xác định khóa chính của bảng
30.1.5.6. làm min thiết kế
30.1.5.7. áp dụng quy tắc chuẩn hóa
30.1.6. các loại quan hệ
30.1.6.1. 1-1(one- to - one)
30.1.6.1.1. là thuộc tính khóa bên này làm khóa ngoại bên kia hoặc ngược lại
30.1.6.2. 1-nhiều (one to many)
30.1.6.2.1. là thuộc tinh khóa bên 1 làm khóa ngoai bên nhiều
30.1.6.3. n-n( many to many)
30.1.6.3.1. là quan hệ mới có khóa chính gồm 2 thuộc tính khóa của 2 quan hệ
30.1.7. chuẩn hóa thiết kế
30.1.7.1. 1nf
30.1.7.1.1. là nếu giá trị của 1 trường bao gồm 1 giá trị không phải là 1 danh sách giá trị. Trường nay còn được gọi là atomic
30.1.7.2. 2nf
30.1.7.2.1. là 1 trường đã thuộc 1nf và mỗi cột không phải là khóa chính , không phụ thuộc hoàn toàn vào khóa chính
30.1.7.3. 3nf
30.1.7.3.1. là trường thuộc 2nf và các cột không phải là khóa độc lập với nhau
30.1.8. constraint (ràng buộc )
30.1.8.1. là quy tắc được quy định cho bảng
30.1.8.2. sử dụng constraint có thể hạn chế những dữ liệu có đưa vào trong bảng
30.1.8.3. giúp cho dữ liệu chính xác tin cậy toàn vẹn
30.1.8.4. dữ liệu đưa vào trong bảng cần tuân thủ các constraint
30.1.8.5. có thể quy định constraint cho bảng hoặc cột
30.1.9. 1 số ràng buộc thông dụng
30.1.9.1. not null để bắt buộc các trường phải có giá trị khác null
30.1.9.2. UNIQUE để bắt buộc các giá trị trong cột phải khác nhau
30.1.9.3. CHECK được sử dụng để quy định điêu kiên ràng buộc cho giá trị của 1 cột
30.1.9.4. DEFAULT được sử dụng để quy định giá trị mặc định cho 1 trường
30.1.10. PRIMARY KEY( khóa chính)
30.1.10.1. là 1 cột hoặc nhiều cột được sử dụng để xác định bản ghi duy nhất trong bảng
30.1.10.2. là UNIQUE và NOT NULL
30.1.10.3. mỗi bảng chỉ có thể có 1 khóa chính
30.1.10.4. từ khóa PRIMARY KEY được sử dụng để định nghĩa 1 khóa chính
30.1.11. khóa phức hợp
30.1.11.1. là khóa được tạo nên từ 2 hoặc nhiều cột
30.1.12. FOREIGN KEY ( khóa ngoại )
30.1.12.1. là cơ chế để tạo liên kết giữa 2 bảng trong cung cơ sở dữ liệu
30.1.12.2. được đặt trên 1 cột của bảng này và tham chiếu đến khóa chính của bảng khác
30.1.12.3. kiểu dữ liệu của khóa chính và khóa ngoại phải giống nhau
30.1.13. các kiểu dữ liệu
30.1.13.1. char
30.1.13.2. varchar
30.1.13.3. text
30.1.13.4. longtext
30.1.13.5. int
30.1.13.6. bigint
30.1.13.7. float
30.1.13.8. duoble
30.1.13.9. date
30.1.13.10. datetime
30.1.13.11. timestamp
30.1.13.12. time
30.1.14. crud
30.1.14.1. là tên gọi ngắn gọn để chỉ đến 4 thao tác cơ bản của 1 hệ thống có lưu trữ dữ liệu
30.1.14.2. Create: tạo dữ liệu
30.1.14.3. Read hoặc Retrieve: đọc dữ liệu
30.1.14.4. Update: cập nhập dữ liệu
30.1.14.5. Delete: xóa dữ liệu
31. Access modifier
31.1. là các từ khóa được sử dụng để quy định mức độ phạm vi truy cập đến lớp và các thành phần lớp
31.2. các mức độ truy cập
31.2.1. public
31.2.1.1. dung cho các lớp thuộc tính phương thức. quy định đươc truy cập từ bất cứ đâu
31.2.2. protected
31.2.2.1. dùng cho thuộc tính phương thức của lớp, chỉ được truy cập trong lớp và lớp con kế thừa
31.2.3. private
31.2.3.1. dùng cho thuộc tính và phương thức của lớp, chỉ được phép truy cập ở trong lớp
31.2.4. khi không khai báo access modifier thì mặc định là public
31.3. data field encapsulation( bao gói trường dữ lieeuj)
31.3.1. là hình thức hạn chế truy ccapj trực tiếp vào các thuộc tính của đối tượng bằng cách sử dụng từ khóa private
31.3.2. khai báo các phương thức để kiêm soát việc truy cập vào các thuộc tính của đối tượng
31.3.3. các phương thức cho phép thay đổi gọi là giá trị của thuộc tính gọi là setter, các phương thức cho phép lấy giá trị của thuộc tính gọi là getter
31.4. static
31.4.1. được sử dụng để khai báo các thuộc tính và phuong thức của lớp
31.4.2. các thành phần static trực thuộc lớp thay vì trực thuộc đối tượng
31.4.3. biến static còn được goi là biến của lớp
31.4.4. phương thức static còn được gọi là phương thức của lớp
31.4.5. có thể truy xuất các thành phần static băng cách sử dụng lớp hoặc đối tượng
31.4.6. không cần tạo đối tượng vẫn có thể sử dụng các thành phần static