01.chương trình tiếng anh giao tiếp thương mại tại trường đại học kinh tế tp....
Os php-5.3new1
1. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 1 of 7
Có gì m i trong PHP 5.3, Ph n 1: Các thay iv
giao di n i t ng
M c : Trung bình
John Mertic, K s ph n m m, SugarCRM
06 11 2009
PHP V5.3 lên l ch phát hành s m. Nhi u c tính m i trong b n phát hành này ã trong các giai o n k
ho ch trong vài n m. c chào bán ban u nh m t “PHP V6 không có tr giúp mã Unicode g c”,
PHP V5.3 ã c phát tri n thành m t b n nâng c p v i nhi u c tính cho dòng PHP V5. Nó c
thi t k làm m t b n phát hành chu n b cho các nhà phát tri n PHP V6 khi nó xu t hi n v i nhi u c
tính m i, làm s ch các c tính hi n t i b ng cách thay i chút ít (tweaking) các ch c n ng, c nh khía
c nh v n n c bi t, và lo i b các tính n ng c mà s không còn trong các b n sau này c a PHP. Trong
lo t bài "Có gì m i trong PHP V5.3" này, chúng ta s xem xét các c tính m i c a b n V5.3, và xem
cách chúng c dùng, c ng nh cách dùng chúng trong ng d ng web c a b n.
PHP V5 và l p trình h ng it ng
Khi PHP V5 c phát hành vào n m 2004, nó ã là m t b c i nh y v t so v i nh ng gì mà PHP V4 cung c p v
m t thi t k và l p trình h ng i t ng OOP (object-oriented program). Nó b sung m t vài c i ti n c n thi t, thí d
nh kh n ng nhìn th y l p (class visibility), các b d ng (constructors) và các b hu! (destructors) phù h p, các g i ý
v ki u, và API ph n nh l p (class-reflection API). Nó m" ra cánh c#a cho vi c l p trình h ng i t ng tiên ti n
trong PHP, và cho phép b n th c hi n nhi u m$u thi t k d% h&n nhi u, cùng v i các l p thi t k và các API t t h&n.
Trong PHP V5.3, nhi u b sung gia t ng ã c a vào nh m t ng c 'ng OOP. Nh ng c i ti n này ã n m trong
l(nh v c b sung cú pháp và c i ti n hi u n ng. b)t u, chúng ta hãy quan sát các c tính m i s*n có v i các
ph &ng th c và thành viên t(nh.
Các ph ng th c t nh c c i thi n và qu n lí thành viên (member handling)
M t b sung h u ích trong PHP V5 là kh n ng quy nh m t ph &ng th c ho c thành viên c a m t l p là t(nh (PHP
V4 th c hi n h+ tr truy c p t(nh n các ph &ng th c và các thành viên c a l p, nh ng không có kh n ng quy nh
r ng ph &ng th c ho c thành viên ó c thi t k truy c p t(nh). Truy c p t(nh c bi t r t h u ích th c hi n
m$u thi t k &n l, (singleton design), n&i ch- t.n t i m t th c th c a l p.
PHP V5.3 ã thêm vào m t s c tính t ng c 'ng tr giúp các thành viên và các ph &ng th c t(nh trong m t l p.
u tiên chúng ta s quan sát m t ph &ng th c ma thu t v/a c thêm vào: __callStatic().
Ph ng th c ma thu t _callStatic()
PHP V5 có m t s ph &ng th c c xác nh m t cách c bi t, có th s# d ng bên trong các l p g i là các ph ng
th c ma thu t (magic methods). Khi c xác nh trong l p, các ph &ng th c này cung c p các ch c n ng c bi t,
và có kh n ng ch u t i (kh n ng cho phép m t ph &ng th c ch p nh n các ki u tham s khác nhau) và tính a d ng
(polymorphism) (kh n ng cho phép các ki u d li u khác nhau s# d ng cùng m t giao di n). Chúng c ng m" cánh
c#a cho vi c s# d ng các ki u khác nhau c a các ph &ng th c l p trình OOP và các m$u thi t k b ng PHP m t cách
d% dàng.
Trong PHP V5.3 có m t ph &ng th c ma thu t m i c thêm vào: __callStatic(). Nó làm vi c t &ng t nh
ph &ng th c ma thu t __call() c thi t k x# lý các cu c g i ra ph &ng th c cho các ph &ng th c mà không
c xác nh ho c nhìn th y c trong l p. Tuy nhiên, __callStatic() c thi t k x# lý các cu c g i ra
ph &ng th c t(nh, chúng cho chúng ta kh n ng thi t k t t h&n s quá t i v ph &ng th c c a chúng ta. M t ví d v
2. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 2 of 7
cách s# d ng ph &ng th c này nh d i ây.
Li t kê 1. Ví d v vi c s d ng __callStatic() i v i __call()
!! ""
# $
%& ""
M t i u c n l u ý là PHP th c hi n áp t nh ngh(a c a ph &ng th c __callStatic(); nó ph i là chung
(public), và nó ph i c tuyên b là t(nh. C ng nh v y, ph &ng th c ma thu t __call() c ng ph i c xác nh
là chung, úng nh t t c các ph &ng th c ma thu t ph i là nh v y.
Các cu c g i ra t nh ng
M t c tính r t hay c a PHP là các bi n cho bi n (variable variables). i u có ngh(a là b n có th s# d ng chu+i giá
tr c a m t bi n quy nh tên c a m t bi n khác. Nói m t cách khác, b n có th th c hi n vi c gì ó gi ng nh d i
ây.
Li t kê 2. Các bi n “bi n” (Variable variables)
' # ( (
' # ()(
' "" ( (
"" ()(
' "" ()(
Cùng m t khái ni m có th c s# d ng v i các hàm, ho c th m chí các ph &ng th c l p nh d i ây.
Li t kê 3. Tên các hàm bi n và ph ng th c l p
*
+
, -
# (* (
# ( +(
' # $ "" (* (
'%& "" , -
i m m i " PHP V5.3 là kh n ng có tên c a l p khi c quy nh là m t bi n khi th c hi n m t cu c g i t(nh. Vi c
này m" ra m t vài kh n ng m i, nh d i ây.
3. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 3 of 7
Li t kê 4. t tên l p bi n
*
+
, -
# (* (
# ( +(
!! "" , -
B sung này t o ra khía c nh v các bi n c a bi n trong PHP y , cho phép dùng chúng ch- trong t/ng tình hu ng
v i PHP.
Chúng ta hãy quan sát m t c i ti n h u ích h&n cho vi c s# d ng các ph &ng th c và thành viên t(nh: liên k t t(nh
mu n (late static binding).
Liên k t t nh mu n
M t trong nh ng i u phi n ph c nh t v PHP tr c V5.3 là cách ph &ng th c và thành viên t(nh c x# lý. Cho n
nay, các tham chi u t(nh (static references), ch0ng h n nh các tham chi u c làm b n thân nó ho c __CLASS__,
c gi i quy t trong ph m vi l p, trong ó hàm c nh ngh(a. V n là " ch+ tham chi u s không úng n u l p
c m" r ng và cu c g i c th c hi n t/ l p con (child class) m i. Liên k t t(nh mu n ã c thêm vào PHP
V5.3 gi m b t v n này. minh ho rõ h&n, chúng ta hãy t o ra m t l p v i m t ph &ng th c t(nh d i ây.
Li t kê 5. L p Foo v i ph ng th c t nh test()
# ( (
!!
Chúng ta hãy m" r ng l p này. Chúng ta s nh ngh(a l i thành viên $name trong l p con này.
Li t kê 6. L p con Bar m r ng l p cha Foo
. '
# (. (
Chúng ta th c hi n cu c g i t(nh trong Li t kê 7.
Li t kê 7. Các cu c g i ph ng th c t nh test()
. !!
K t qu t/ cu c g i ó s là chu+i Foo. ây là do tham chi u self::$name th c hi n trong ph &ng th c test()
c th c hi n b ng l p Foo. Liên k t xu t hi n b ng cách này vì ây là n&i hàm c nh ngh(a.
4. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 4 of 7
PHP V5.3 ã thêm t/ khoá static cho phép b n th c hi n m t tham chi u i v i l p hi n t i. Do ó b n s thay
i l p Foo trên s# d ng t/ khoá này trong Li t kê 8, và chúng ta s th y r ng Bar s thay vào k t qu .
Li t kê 8. S d ng t khoá static
# ( (
!!
.
# (. (
. !! "" (. (
M t i u c n l u ý v t/ khoá static là nó không làm vi c nh cách làm trong ng c nh không t(nh. i u này có
ngh(a là các nguyên t)c k th/a bình th 'ng không áp d ng v i các cu c g i t(nh. T/ khoá static s ch- c n c g)ng
gi i quy t cu c g i trong l p hi n t i thay cho l p mà hàm c nh ngh(a. ây là m t i u quan tr ng c n l u ý.
Bây gi' chúng ta ã th y m t vài c i ti n v i các ph &ng th c và thành viên t(nh, hãy quan sát m t vài l p m i c
b sung vào b ph n r t h u ích c a PHP V5, là Th vi n l p PHP chu n.
Th vi n l p PHP chu n
Th vi n l p PHP chu n (SPL) là m t t p các giao di n và các l p thêm vào PHP V5, c thi t k gi i quy t các
v n chu n. Các v n này g.m vi c cho m t i t ng c l p (iterateable), cho phép m t i t ng i x# c
nh m t m ng, ho c th c hi n m t danh sách móc n i. L i i m c a vi c s# d ng các l p và các ph &ng th c này là "
ch+ chúng là riêng cho PHP, ngh(a là chúng s nhanh h&n n u chúng c th c hi n trong chính PHP. Chúng c ng,
trong nhi u ví d , cho phép nhi u hàm trong c a PHP s# d ng các i t ng tr c ti p này, ch0ng h n nh cách giao
di n bi n l p (Iterator interface) cho phép b n s# d ng c u trúc foreach l p l i trên i t ng.
PHP V5.3 thêm khá nhi u l p vào SPL. Có m t i u chúng ta ã tham kh o tr c ây là cài t danh sách móc n i
kép (doubly linked list) trong l p SPL SplDoublyLinkedList. Nó c s# d ng b"i hai l p SPL m i khác:
SplStack, cài t stack (vùng nh x p ch.ng), và SplQueue, cài t hàng i.
Chúng ta hãy quan sát cách b n có th s# d ng l p SplStack th c hi n m t vùng nh .
Li t kê 9. S d ng SplStack
+ # $ +
"" $ $ +
+%& ( (
+%& ( (
+%& ( (
"" $ +
+ "" /
"" 0 +
+
1 2
"" 0 ! 1 2 1 2 1 2
"" +
+%& "" ( (
"" $ $ +
5. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 5 of 7
+ "" 3
SqlQueue làm vi c theo ki u t &ng t , nh ng nó làm vi c nh m t hàng i (vào tr c, ra tr c; ch không ph i là
vào sau, ra tr c, nh là stack. Ngoài ra, còn cài t ng (SplHeap), c ng nh là hàng i riêng và các cài t ng
cho vài tình hu ng nh t nh (SplMinHeap, SplMaxHeap và SplPriorityQueue).
M t b sung h u ích n a là l p SplFixedArray mà nh tên ã ng ý, là cài t m ng kích th c c nh. T t nhiên
nó khá nhanh — th c ra là nhanh n m c c o th# chu n, nhanh h&n 10-30% so v i cài t m ng l)p s*n trong
PHP. S t ng t c này là do vi c m ng này có m t kích th c c nh, không thay i nh PHP m c nh, và do không
c phép s# d ng các ch- m c phi s . Li t kê 10 ch- ra cách nó c s# d ng.
Li t kê 10. SplFixedArray
# $ ' 4 /
152 # ( (
162 # ( (
132 # ( (
%& ) 7 "" )
1/2 # ( (
0
1 0 2
8 !
1 2 1 2 1 2 1 2
Ngoài ra còn có m t vài l p bi n l p m i ã c thêm vào: FilesystemIterator và GlobIterator. Các
bi n này làm vi c nh các l p bi n l p khác trong PHP, nh ng chúng c thi t k c bi t dùng cho vài cá th nh t
nh.
M t thay i n a v i SPL là " ch+ bây gi' nó luôn c kích ho t trong PHP V5.3. Trong các phiên b n tr cc a
PHP V5, b n có th vô hi u hoá SPL vào lúc d ch, nh ng i v i PHP V5.3, vi c này không còn cho phép.
Các b sung m i cho SPL thêm m t s ch c n ng h u ích vào PHP r t d% s# d ng, c ng nh các b sung v c u trúc
d li u, thí d nh các danh sách móc n i kép, stack, heap, và hàng i. Các l p này có th c s# d ng thay th
các cài t không gian ng 'i dùng mà b n có th có, chúng s thu ct c gia t ng và s k t h p t t h&n v i các
c u trúc và hàm PHP khác nhau.
Gi' chúng ta ã th y m t vài b sung m i cho SPL, hãy xem cách OOP trong PHP V5.3 ã thu c m t hi u n ng
quan tr ng và c i thi n vi c s# d ng b nh v i b sung vi c gom rác xoay vòng (circular garbage collection).
Gom rác xoay vòng
M t v n mà các nhà phát tri n PHP g p ph i trên quan i m hi u n ng là vi c gom rác (garbage collection). PHP có
m t b gom rác khá &n gi n, mà v c& b n s thu th p rác cho m t i t ng khi nó không còn n m trong ph m vi
h p l . Cách mà nó th c hi n vi c này v m t n i t i là b ng cách s# d ng m t b m quy chi u (reference counter),
khi b m ch m 0 (có ngh(a là không còn các quy chi u n i t ng này n a), i t ng s c thu gom và
g ch b t/ b nh .
Vi c này khá t t, nh ng có th tr" thành m t v n trong các tình th khi m t i t ng quy chi u n m t i t ng
khác theo quan h cha-con (parent-child relationship). V i tình tình th này, b m quy chi u i v i các i t ng
ó không c thu gom, nên b nh s# d ng b ng i t ng này l u l i trong b nh không quy chi u (unreferenced
memory) và không c ng/ng c p phát, cho n khi k t thúc yêu c u. Chúng ta hãy quan sát m t ví d khi v n
này x y ra.
Li t kê 11. Quan h l p cha-con b thu gom rác không phù h p trong b n PHP V5.2 và b n tr c ó
9
6. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 6 of 7
%& # $
9
%& #
Trong ví d này, m+i khi b n t o ra m t cá th c a l p Parent và sau ó cá th ti p theo không còn n m trong ph m
vi h p l , b nh không bao gi' c gi i phóng, nh v y k ch b n l nh s ngày càng l n thêm trong vi c s# d ng b
nh . Có m t s gi i pháp v không gian ng 'i dùng i v i v n này, ch0ng h n nh t o m t hàm hu! cho l p cha
mà s tr c ti p gi i phóng i t ng con. Hàm hu! này s ph i c g i ra riêng tr c khi b thi t t quy chi u l p
cha (parent class reference). Th c hi n t t c các vi c này gây ph c t p m t chút cho ch &ng trình c a b n.
Trong PHP V5.3, b gom rác s dò tìm các quy chi u vòng này và có th gi i phóng h t b nh chúng s# d ng, do ó
vi c s# d ng b nh PHP s gi c ngang b ng khi k ch b n l nh c th c hi n. Khi m+i tham chi u n l p
Parent c lo i b , tham chi u l p Child bên trong l p Parent c ng s c gom rác.
Tóm t t
PHP ã ti n thêm m t quãng dài v cách h+ tr l p trình h ng i t ng, t/ vi c h+ tr y u trong nh ng ngày còn
PHP V4 cho n các b sung nhi u c i ti n h&n trong PHP V5 và các thay i nh v i các b n ti p sau ó. Hi n nay,
PHP V5.3 ã t c m t vài c i thi n h ng thú, g.m các c i ti n v cú pháp nh các ph &ng th c ma thu t m i
__callStatic(), các cu c g i t(nh ng, liên k t t(nh mu n, ph &ng th c t(nh, và tr giúp thành viên. Các b
sung m i vào SPL v i các b sung danh sách móc n i kép, các stack, heap, và hàng ch', t ra m t vài c u trúc d
li u thông th 'ng trên u ngón tay b n (d% tìm th y) và làm cho chúng d% s# d ng. Cu i cùng, b gom rác xoay vòng
mong i t/ lâu ã n nh b nh và các v n v hi u n ng làm vi c v i các l p t quy chi u, b ng cách cài t m t
b gom rác nhi u c i ti n mà ã gi i phóng b nh úng cách cho các cá th vòng tròn này. T t c các c tính này
làm cho PHP V5.3 tr" thành m t ngôn ng m nh h&n nhi u i v i l p trình h ng i t ng.
Tài nguyên
H ct p
Ti p t c lo t bài này v i "Có gì m i trong PHP V5.3, Ph n 2, Ph n 3 và Ph n 4.
Trang Zend Developer Zone có t li u dành cho các hàm qu n lý b nh (memory manager functions).
c "M t h ng d$n v di trú PHP V5" tìm hi u cách di trú mã c phát tri n trong PHP t/ b n V4 n
b n V5.
"K t n i các ng d ng PHP v i Apache Derby" ch- cho b n cách cài t và l p c u hình PHP trên Windows®
(m t vài b c có th áp d ng v i Linux®).
PHP.net là tài nguyên trung tâm dành cho các nhà phát tri n PHP.
Xem trang "Danh sách các tài li u PHP nên c."
Duy t qua toàn b n i dung PHP trên developerWorks.
M" r ng các k n ng PHP c a b n b ng cách xem trang Các tài nguyên d án PHP c a IBM developerWorks.
7. Có gì m i trong PHP 5.3, Ph n 1: Các thay i v giao di n it ng Page 7 of 7
L)ng nghe các ph ng v n và th o lu n thú v cho các nhà phát tri n ph n m m, xem trang developerWorks
podcasts.
S# d ng c& s" d li u v i PHP? Hãy th# Zend Core for IBM, ó là m t môi tr 'ng phát tri n và ch y s n xu t
PHP li n kh i, s*n dùng ngay, d% dàng cài t và có h+ tr DB2 V9 c a IBM.
Theo sát các s ki n k thu t và các bu i phát tin trên m ng.
Theo dõi các h i ngh s)p c t ch c, các tri n lãm th &ng m i, các bu i phát thanh trên m ng và các s ki n
khác trên kh)p th gi i c các nhà phát tri n mã ngu.n m" c a IBM quan tâm.
Truy c p trang Open source zone c a developerWorks có các thông tin v cách làm th nào, các công c , và
c p nh t i t ng sâu h&n giúp b n phát tri n các công ngh mã ngu.n m" và s# d ng chúng b ng các s n
ph m c a IBM.
Xem và tìm hi u v IBM và các công ngh mã ngu.n m" và các ch c n ng c a s n ph m các trình di%n mi%n
phí developerWorks Theo yêu c u.
L y s n ph m và công ngh
i m i d án phát tri n mã ngu.n m" ti p theo c a b n b ng ph n m m ch y th# c a IBM, có s*n t iv
ho c trên DVD.
T i v các phiên b n ch y th# c a s n ph m IBM và b)t tay vào các công c phát tri n ng d ng và các s n
ph m ph n m m trung gian DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
Th o lu n
Tham gia vào developerWorks blogs và vào c ng .ng developerWorks.
Tham gia vào H i th o developerWorks PHP Forum: Phát tri n các ng d ng PHP v i các s n ph m Qu n tr
Thông tin IBM (DB2, IDS).
ôi nét v tác gi
John Mertic ã t t nghi p i h c ngành Khoa h c Máy tính c a i h c Qu c gia Kent và hi n là k s ph n m m
t i SugarCRM. Ông có nhi u óng góp vào các d án mã ngu.n m", áng k nh t là các d án PHP; ông là ng 'i t o
ra và duy trì B Cài t PHP trên Windows (PHP Windows Installer).