DANH MỤC TÀI LIỆU
Lập trình hướng đối tượng với PHP và những điều cần biết
L p trình h ng đ i t ng v i PHP và nh ng đi u c n bi t ướ ố ượ ế
1. Các đ c đi m c b n c a l p trình h ng đ i t ng. Chúng đ c ơ ả ướ ượ ượ
th hi n nh th nào trong PHPể ệ ư ế
L p trình h ng đ i t ng có 4 đ c đi m c b n sau. ướ ượ ơ ả
Tính đóng gói
Tính đóng gói (encapsulation) “đóng gói” thu c tính và ph ng th c ươ ứ
c a đ i t ng (ho c l p) thông qua vi c gi i h n quy n truy c p ố ượ
(ho c thay đ i) giá tr c a thu c tính ho c quy n g i ph ng th c. ị ủ ươ
Nói cách khác tính đóng gói cho phép ki m soát quy n truy c p (và ề ậ
thay đ i) giá tr c a thu c tính ho c quy n g i ph ng th c c a đ i ị ủ ươ
t ng (ho c l p) và đ i t ng (ho c l p) con.ượ ặ ớ ượ ặ ớ
Trong PHP vi c đóng gói đ c th c hi n nh s d ng các t ượ ờ ử
khoá public, private và protected:
opublic: Cho phép truy c p (và thay đ i giá tr ) c a thu c tính và ị ủ
ph ng th c m i ph m vi, có th hi u là mang đ c tính c ngươ ứ ở
đ ng.
oprotected: Ch cho phép truy c p (hay thay đ i) giá tr c a thu c ị ủ
tính và ph ng th c ph m vi c a đ i t ng con (ho c l p ươ ứ ở ượ
con), có th hi u là mang đ c tính dòng h .ể ể
oprivate: Ch cho phép truy c p (hay thay đ i) giá tr c a thu c ị ủ
tính và ph ng th c ph m vi c a đ i t ng (ho c l p), có ươ ứ ở ượ
th hi u là mang đ c tính gia đình.ể ể
Tính k th aế ừ
Tính k th a trong l p trình h ng đ i t ng cho phép m t l p ế ướ ố ượ ộ ớ
(class) có th k th a các thu c tính và ph ng th c t các l p khác ể ế ươ
đã đ c đ nh nghĩa. L p đ c k th a còn đ c g i là l p cha và ượ ị ượ ế ượ ọ
l p k th a đ c g i là l p con. ế ừ ượ
Đi u này cho phép các đ i t ng có th tái s d ng hay m r ng các ượ ở ộ
đ c tính s n có mà không ph i ti n hành đ nh nghĩa l i. ả ế
Trong PHP, m t l p có th k th a t m t l p khác, vi c k th a ộ ớ ế ộ ớ ế
đ c th c hi n thông qua s d ng t khóaượ ử ụ extends. Đ i t ng thu c ố ượ
l p con s có các thu c tính và ph ng th c ươ protected và public c a
l p mà nó k th a. ế ừ
Tính tr u t ngừ ượ
Tính tr u t ng (abstraction) trong l p trình h ng đ i t ng giúp ượ ướ ố ượ
gi m s ph c t p thông qua vi c t p trung vào các đ c đi m tr ng ứ ạ ệ ậ
y u h n là đi sâu vào chi ti t.ế ơ ế
Nh v y khi t ng tác v i đ i t ng ch c n quan tâm đ n các thu cư ươ ượ ỉ ầ ế
tính, ph ng th c c n thi t. Chi ti t v n i dung không c n chú ý ươ ế ế ề ộ
đ n.ế
PHP có abstract class và interface đ tr u t ng hóa các đ i t ng. Ví ượ ố ượ
d khi ta t o m t l p (class) dùng đ i diên cho các tài kho n ti n g i ộ ớ
ngân hàng c a các khách hàng và đ t tên cho l p này là BankAccount.
L p này có hai thu c tính là $balance và $interest dùng đ l u d li uể ư
s ti n d và lãi su t ti n g i c a tài kho n. ề ư ề ử
V i tính tr u t ng (abstraction) thì toàn b s ph c t p c a vi c x ượ ộ ự
quá trình g i ti n và rút ti n s đ c th c hi n trong 2 ph ng ẽ ượ ươ
th c deposit và withdraw. Các l p trình viên không c n ph i quan tâm t i ầ ả
s ph c t p (hay n i dung chi ti t) c a vi c x lý các công vi c g i ti n ế ệ ử ệ ử
và rút ti n trên mà ch c n bi t m c đích c a t ng ph ng th c là gì. ỉ ầ ế ươ
V i tính tr u t ng thì l p trình viên ch c n quan tâm t i m c đích c a ượ ỉ ầ
ph ng th cươ deposit là đ n p ti n vào tài kho n. Toàn b chi ti t c a quy ể ạ ế
trình x lý g i ti n s đ c th c hi n bên trong ph ng th c ượ ươ deposit.
Tính đa hình
Th hi n qua vi c có th đ nh nghĩa m t đ c tính, ho c ph ng th cể ệ ộ ặ ươ
cho m t lo t các đ i t ng g n gi ng nhau. Nh ng khi th c hi n thì ố ượ ư
các đ i t ng khác nhau s có cách th c hi n khác nhau và cho ra k tố ượ ế
qu khác nhau.
Tính đa hình (polymorphism) trong l p trình h ng đ i t ng cho ướ ố ượ
phép các l p con có th vi t l i (override) các thu c tính ho c ế ạ
ph ng th c t l p cha. Ví d : Đ i t ng “hình vuông” và “hình ươ ừ ớ ượ
tròn” có chung 1 ph ng th c là “chu_vi”. Khi g i ph ng th c này ươ ứ ươ ứ
thì v i m i đ i t ng s có 1 công th c tính khác nhau và cho ra k t ố ượ ế
qu khác nhau. Trong PHP:
oCác l p con có th vi t l i ho c m r ng ph ng th c c a l p ế ở ộ ươ
cha mà nó k th a.ế ừ
oCác class cùng implement m t interface nh ng chúng có cách ộ ư
th c th c hi n khác nhau cho các method c a interface đó.ứ ự ệ
oQua đó cùng 1 ph ng th c s cho k t qu khác nhau khi đ cươ ứ ẽ ế ượ
g i b i các đ i t ng thu c l p khác nhau. ố ượ
2. S khác bi t gi a Abstract Class và Interface
Interface và Abstract class là 2 khái ni m c b n trong l p trình OOP. ơ ả
Nh ng phân l n m i ng i c m th y m h và l n l n 2 khái ni m này. ư ớ ọ ườ ấ ơ
V y chúng là gì, khác nhau nh nào? T i sao dùng cái này ư ạ Interface mà
không ph i Abstract và ng c l i ??? B qua t t c nh ng ph n v ượ ạ ấ ả
thuy t c a vi c t o m tế abstract class và interface. B n không c n quan ạ ầ
tâm nhi u đ n vi c ế abstract có th khai báo nh ng gì, hay interface có đ cượ
phép đ nh nghĩa n i dung ph ng th c hay không. Đi m c b n khi b n ươ ơ ả
đ c h i v s khác bi t gi a chúng là gì? Đó chính là m c đích mà chúng ượ ề ự
đ c s d ng: –ượ ử ụ Abstract class: là m t class cha cho t t c các class có ấ ả
cùng b n ch t. B n ch t đây đ c hi u là ki u, lo i, nhi m v c a ả ấ ả ấ ượ
class. Hai class cùng hi n th c m t interfacecó th hoàn toàn khác nhau v ể ề
b n ch t. Hi u đ n gi n nh m t th ng con (child class) ch có th là con ơ ư ộ
c a m t th ng cha, có tính cách gi ng cha (abstract class) nó. – ộ ằ Interface: là
m t ch c năng mà b n có th thêm và b t kì class nào. T ch c năng đây ừ ứ
không đ ng nghĩa v i ph ng th c (ho c hàm). ớ ươ Interface có th bao g m ể ồ
nhi u hàm/ph ng th c và t t c chúng cùng ph c v cho m t ch c năng. ươ ấ ả
V y, b n không nên nh m l n khi nói v vi c m t class ề ệ
đ cượ implement hay extend. Nhi u ng i th ng hay đ ng nh t là không ườ ườ
phân bi t hai t này, nh ng chính chúng đã nói lên s khác bi t ệ ừ ư
gi a interface và abstract class. B n ch có th th a k (extend) t m t ể ừ ế ừ ộ
class và ch có th hi n th c (implement) các ch c năng (interface) cho ể ệ
class c a mình.
Cuối cùng, cũng nên liệt kê các điểm khác biệt giữa hai khái niệm này để bạn có thể sử dụng được khi
cần thiết. Các điểm khác biệt này có thể khác nhau tùy vào ngôn ngữ mà bạn sử dụng. Vì vậy bạn chỉ cần
nhớ các điểm căn bản sau:
Interface Abstract class
Multiple
inheritance
M t class có th hi n th c nhi u interface. ể ệ
(t m coi là th a k ) ừ ế
Không h tr đa ỗ ợ
th a kừ ế
Access
Modifiers
M i ph ng th c, property đ u m c đ nh là ươ ặ ị
public.
Có th xác đ nh ể ị
modifier.
Adding
functionality
M i ph ng th c, property c a interface c n ọ ươ
đ c hi n th c trong class.ượ ệ Không c n thi t.ầ ế
Fields and
Constants Không Có
N u m t classế ộ implements nhi u interface mà các interface có nh ng
ph ng th c cùng tên thì s không l i n u các ph ng th c đó truy n vào ươ ứ ế ươ ứ
s l ng bi n b ng nhau. Còn n u các ph ng th c đó khác s l ng ố ượ ế ế ươ ố ượ
bi n truy n vào thì s sinh ra l i “Fatal error”.ế ề
3. Th nào là m t ph ng th cế ươ static. Phân bi t cách dùng t ệ ừ
khoá static::method() v i self::method()
Ph ng th cươ static
Ph ng th cươ static là ph ng th c có th truy c p mà không c n ươ ứ
kh i t o m t đ i t ng c a class.ở ạ ố ượ
Ph ng th cươ static g n li n v i class h n là v iơ object (là thành ph n
kh i t o classb ng t khóaằ ừ new), đây là nh ng ph ng th c ch ươ ứ ỉ
m t, có đ a ch xác đ nh và không thay đ i đ a ch trên vùng nh ổ ị
(tĩnh).
Khi ch ng trình ch y, nó s đ c sinh ra đ u tiên tr c t t c các ươ ẽ ượ ướ
truy nh p t i nó và t n t i cho t i khi ch ng trình k t thúc.ậ ớ ồ ạ ươ ế
Vi c th c thi hàmệ ự static trong class có th th c hi n b ng ể ự
l nh: static::staticMethod(), self::staticMethod() ho c $this-
>staticMethod(), trong đó self và static là đ i di n c a class, còn $this là
đ i di n c a object. Trong ph ng th cươ static không th g i ph ng th c ể ọ ươ
ho c thu c tínhặ ộ non-static. Nh ng ph ng th cư ươ non-static có th g i ể ọ
ph ng th c ho c thu c tínhươ ứ ặ static. B i vì có th hi u đ n gi n nh sau: ể ể ơ ư
Ph ng th cươ static có th g i ngay c khi ch a kh i t o ư object, do đó
n u ph ng th cế ươ static g i đ n m t ph ng th c ế ươ non-static thì khi
ch a kh i t oư object, s không có bi n ế $this (là đ i di n c a object)
đ g i đ n ph ng th c ‘non-static`.ể ọ ế ươ
Đ ng nhiên ph ng th cươ ươ non-static luôn luôn có th g i đ n ể ọ ế
ph ng th cươ static vì ph ng th cươ static đã t n t i ngay t khi ch y ồ ạ
ch ng trình, khiươ object ch a đ c kh i t o.ư ượ ở ạ
Phân bi t cách dùng t khoá static::method() v i self::method()
Nh trên chúng ta có nh c đ n t ư ở ế
khóa static::method() v i self::method(), chúng đ u là đ i di n cho ạ ệ class đ
g i đ n các ph ng th c và thu c tínhọ ế ươ static. Câu h i đ t ra làỏ ặ Th t i sao ế ạ
l i ph i có t i 2 t khóa?. N u ch đ n thu n nh trong n i b ế ỉ ơ ư class thì c
2 t khóa trên đ u cho ra k t qu gi ng nhau. Nh ng chúng có th s khác ế ư ể ẽ
nhau n u khiế class này extends t class khác.
Nói tóm l i:
self: đ i di n cho classạ ệ khai báo nó.
static: đ i di n cho classạ ệ g i đ n nó.ế
4. Th nào làế Trait
PHP là ngôn ng ch h tr đ n k th a trong h ng đ i t ng th nên ỉ ỗ ợ ơ ế ướ ượ ế
b n mu n s d ng l i source code m t cách nhi u l n là r t khó khăn. Và ử ụ
đ kh c ph c đi u đó thì t PHP 5.4 tr lên, PHP đã h tr chúng ta ỗ ợ Traits.
M t khái ni m đ c dùng r t là nhi u trong các framework PHP hi n nay, ộ ệ ượ ấ
đi n hình là Laravel.
Trait là gì?
Trait là m t module giúp cho chúng ta có th s d ng l i các ph ng ể ử ươ
th c đ c khai báo trongứ ượ trait vào các class khác nhau m t cách đ n ộ ơ
gi n h n là k th a nh tr c. ơ ế ư ướ
Các đ c đi m c a Traits:ặ ể ủ
oTrait có ch c năng gom l i các ph ng th c và thu c tính mà ươ ứ
chúng ta mu n s d ng l i nhi u l n. ử ụ
oTraits nh m tư abstract class ( đ u không th kh i t o đ c) ở ạ ượ
nh ng không hoàn toàn gi ng nhau.ư ố
oCác ph ng th c trongươ ứ Trait có th bể ị override l i trong class
s d ng nó.ử ụ
u đi m c aƯ Trait:
oGi m vi c l p code đáp ng đ c nguyên t c (DRY ệ ặ ượ – Don’t
Repeat Yoursefl).
thông tin tài liệu
Các đặc điểm cơ bản của lập trình hướng đối tượng. Chúng được thể hiện như thế nào trong PHP. Bài viết sẽ giải thích cụ thể hơn cho bạn
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×