Khi bắt đầu học PHP chắc
hẳn các bạn sẽ thấy PHP khá khó và không dễ học. Vì thế nhiều khi bạn cũng cảm
thấy sự chán nản và sẽ không có hứng thú học nữa . Chính vì thế, bài viết này
sẽ đưa ra một số cách học hiệu quả về lập trình PHP để
bạn có thể xem và tự rút ra một số cách để học tốt hơn..
0. Viết code càng nhiều
càng tốt
Chắc hẳn bạn đã học
tiếng Anh ở trường? Bạn đã từng học thuộc lòng từ vựng, giới từ, ngữ pháp?
Vậy hiện tại bạn sử dụng
tiếng Anh nhiều không?
Nếu bạn trả lời
"không chút nào", thì chắc rằng bạn không cần tiếng Anh tí nào - bạn
chỉ học... cho biết thôi. Nhưng nếu bạn có thể tiếp tục một đoạn đối thoại sau
2 câu "How are you?" và "I'm fine, thanks" thì chắc chắn
bạn có dùng tiếng Anh ngoài lớp học. Có thể chỉ là cố gắng nghe lời thoại phim
mà không nhìn phụ đề, hay đọc hướng dẫn sử dụng của một món đồ ngoại nhập. Dù
bất kỳ lý do nào, bạn đã áp dụng nó vào đời sống và đưa nó vào một tình huống
cá nhân. Điều đó sẽ giúp bạn nhớ lâu hơn.
Vì vậy, hãy áp dụng cùng
nguyên tắc "học đi đôi với hành" cho việc học lập trình, đừng ngại
ngần khi bạn có cơ hội làm một website, dù với kiến thức hiện tại bạn chưa thể
làm được. Khi bạn đã có một dự án lập trình, bạn sẽ có lý do chính đáng để
nghiên cứu và ứng dụng ngôn ngữ lập trình vào thực tế. Lập trình thường xuyên
và có mục tiêu sẽ giúp bạn "biết làm" chứ không cần phải "nhớ
cách làm".
1. Làm quen với PHP
Manual
Hầu như mọi hướng dẫn
cho người mới bắt đầu đều có câu này:
Học cách đọc và sử dụng
tài liệu gốc từ PHP là cách hiệu quả mà đơn giản nhất để trở thành PHP
programmer.
Và đây là tài liệu đó:
the PHP manual
Mới nhìn thấy lần đầu
bảo đảm bạn sẽ cảm thấy nó 'khó nuốt'. Danh mục của nó khá dài, mặc dù không phân
mục lung nhưng nó lại... dài. Tuy nhiên, hãy cố sử dụng nó, và bạn sẽ thấy nó
lợi hại hơn nhiều cuốn ebook mà bạn nhọc công tìm trên mạng.
Có lẽ cách tốt nhất giúp
bạn bắt đầu với PHP manual là bạn có thể tìm thấy thông tin về mọi function
(hàm) qua mẫu sau: http://php.net/function-name. Ví dụ: nếu bạn muốn tìm cách
sử dụng hàm strpos() hãy nhập http://php.net/strpos vào trình duyệt, tương tự
với hàm array_key_exists(), hãy dùng http://php.net/array-key-exists. (Chỉ cần
thay đổi các dấu gạch dưới (_) thành dấu gạch (-) trên thanh địa chỉ trong
trình duyệt)
Đọc các
comment!
Bạn không cần phải đọc
kỹ mọi comment trong mọi mục của php manual. Nhưng nếu bạn gặp khó khăn khi sử
dụng một function nào đó, có thể người khác đã gặp vấn đề tương tự và nói về nó
trong một comment - bao gồm cách giải quyết.
Bạn cũng có thể tìm được
hàng đống những thuật toán hay đoạn code hay từ comment của những người đi
trước.
2. 'Tận dụng' các cộng
đồng PHP Online
Ngoài PHP manual, có rất
nhiều cộng đồng mạng khác mà bạn có thể tìm kiếm trợ giúp. Hầu hết các diễn đàn
lớn trong nước đều có khu vực dành cho lập trình. Ví dụ như:
tinhoc.viettamduc.com...
Nếu khả năng tiếng Anh
của bạn khá, hãy ghé qua stackoverflow.com hay w3schools.com forum.
Mọi giúp đỡ mà bạn nhận
được từ các cộng đồng này đều miễn phí. Vì thế bạn hãy giúp các cộng đồng bạn
tham gia bằng cách giúp đỡ các beginner khác. Không có sự góp sức của bạn và
những người như bạn, các cộng đồng này sẽ dần yếu đi và có khi biến mất hoàn
toàn.
3. Đừng bỏ qua những
phương pháp tốt
Trong quá trình học hay
nghiên cứu, bạn sẽ gặp những thứ được gọi là "phương pháp tốt" (best
practice) trong lập trình. Ví dụ như prepare statements hay 'code chuẩn' (điển
hình là PEAR coding standards).
Bạn đừng gác nó qua một
bên chỉ vì nó phức tạp. Các phương pháp tốt được tạo ra để giúp cho code của
bạn bảo mật hơn, chạy nhanh hơn, và dễ quản lý hơn. Hãy học và áp dụng chúng
càng sớm càng tốt.
Một vấn đề trong lập
trình sẽ có nhiều cách để giải quyết. Vì vậy sẽ có chuyện cách này tốt hơn cách
kia. Bạn có thể bỏ qua những phương pháp cũ, mặc dù chúng đơn giản hơn, để tiếp
cận với phương pháp tốt hơn. Một ví dụ nhỏ: công sức bạn bỏ ra để học cách sử
dụng mysql_query() cũng tương đương với việc học PDO hay MySQLi. Nếu bạn bắt
đầu với hai món sau, thì bạn sẽ có được nền vững chắc hơn trong việc sử dụng
database. Và bạn sẽ đỡ đau đầu, vì việc sử dụng mysql_query() dễ phát sinh
nhiều vấn đề.
4. Đừng bỏ qua những
phương pháp tốt
Không type nhầm đâu, chỉ
để bảo đảm bạn không bỏ qua tip này.
Nếu bạn không dùng những
phương pháp tốt cho cộng đồng, đồng nghiệp, dự án, hay bản thân bạn, thì ít
nhất hãy nghĩ đến những bé mèo con.
5. Viết code dễ hiểu
Khi mới bắt đầu tập tành
code, việc đặt tên 'huyền bí' cho các biến hoặc hàm khá là hấp dẫn. Có thể bạn
đọc ở đâu đó một bài viết nói về hiệu năng của code ngắn, hay thấy một đoạn
code của ai đó làm được cả đống thứ chỉ với hai dòng. Có thể bạn muốn tạo ra
phong cách code của chính bạn. Có thể chỉ vì ai đó nói họ ghét kiểu code đó và
bạn muốn 'chọc' họ.
Dù bất cứ lý do nào,
đừng để nó cám dỗ bạn.
Bạn hãy thử đọc đoạn
code sau:
?
1. <?php
2. $a =
b('jason.lengstorf@copterlabs.com');
3. $c =
explode('@', $a);
4. $d =
$c[1];
5. echo
'The email address ', $a, ' belongs to the domain ', $d, '.';
6. function
b($e) { return htmlentities($e, ENT_QUOTES); }
7. ?>
Đây là một đoạn code
kiểu 'huyền bí'. Tất nhiên bạn có thể hình dung được nó làm gì, nhưng không thể
hiểu rõ ngay lập tức. Tại sao phải bỏ thêm vài phút chỉ để cố hiểu 5 dòng code
này?
Nếu sửa lại đoạn code
cho rõ ràng hơn:
?
1. <?php
2. $email
= sanitize_string('jason.lengstorf@copterlabs.com');
3. $email_pieces
= explode('@', $email);
4. $domain
= $email_pieces[1];
5. echo
'The email address ', $email, ' belongs to the domain ', $domain, '.';
6. function
sanitize_string($string) { return htmlentities($string, ENT_QUOTES); }
7. ?>
Đoạn code giờ đây rõ
nghĩa hơn, bạn có thể hiểu ngay nó mà không kèm nhăn nhó hay lẩm bẩm rủa.
6.Ghi comment cho bất cứ gì bạn phải nghĩ khi
code
Nếu
bạn viết code dễ hiểu, bạn sẽ không cần phải thêm quá nhiều comment. Tuy nhiên,
dù tất cả các tên hàm và biến của bạn đều dễ hiểu, sẽ luôn có chỗ cho những đoạn
code phức tạp - những đoạn code mà bạn phải khựng lại đôi chút để nghĩ cách
giải quyết. Khi đó, hãy nhét comment vào. Và tương lai bạn sẽ tự khen bản thân
khi dùng lại đoạn code cũ.
Một ví dụ:
?
1. $pieces
= explode('.', $image_name);
2. $extension
= array_pop($pieces);
Bạn có mất chút ít thời
gian để biết được $extension ở trên dùng để làm gì không? Và bạn có chắc suy
nghĩ của bạn là đúng không?
Cũng với đoạn code đó,
và thêm một comment ngắn vào:
1. //
Get the extension off the image filename
2. $pieces
= explode('.', $image_name); $extension = array_pop($pieces);
Bây giờ, ngay cả khi bạn
không biết công dụng của các hàm trong đoạn code trên, bạn vẫn biết được
$extension dùng để chứa định dạng của một file ảnh. Kinh nghiệm đau thương là
khi phải tiếp tục phát triển trên code cũ, thì trước tiên phải hiểu được chúng,
và việc này mất thời gian không kém gì việc viết ra nó. Bạn cho rằng bạn sẽ
luôn hiểu được những dòng code của bạn ngay lập tức? Ah, hồi trước mình cũng
nghĩ vậy, nhưng sự thật đau lòng là mình không có khả năng đặc biệt đó. Comment
rất có ích, không chỉ cho bạn mà cả người khác.
Và luật bất thành văn
"cái gì quá cũng không tốt" cũng đúng cho việc dùng comment. Quá
nhiều comment sẽ khiến cho việc đọc code trở nên khó khăn. Và tương tự quá ít
cũng không ổn chút nào.
7.Học cách sử dụng Docblock
Nếu như có một thứ mà
mọi programmer đều làm theo một chuẩn chung, thì đó chính là docblock.
Docblock
là một loại comment, và có nhiều dòng. Công dụng của nó:
Chứa
câu trả lời cho câu hỏi "cái gì đây" và "tại sao phải dùng"
cho mỗi file, hàm...
Đưa
miêu tả rõ ràng về các kiểu biến (variable, paremeter) và giá trị trả về
(return value) của hàm.
Miêu
tả ngắn gọn về chức năng của một đoạn code.
Khi
bạn sử dụng một IDE có hỗ trợ docblock, bạn sẽ đọc được nội dung của docblock
về class, hay hàm trong phần chú thích ngay khi bạn đang code mà không cần phải
mở file khác chỉ để đọc comment, hay docblock.
Phương
pháp này thường được dùng bởi các programmer cấp cao, bởi code họ viết ra được
nhiều người khác sử dụng. Nhưng đây cũng là một 'phương pháp tốt nên áp dụng
càng sớm càng tốt'. Dĩ nhiên bạn có thể bỏ qua, nhưng trước khi làm vậy, hãy
nghĩ đến... mèo con.
?
1. /**
· A
simple class to get the sum or difference of $_foo and a value
2. *
· @author
Jason Lengstorf <jason.lengstorf@copterlabs.com>
· @copyright
2011 Copter Labs
· @license
http://www.opensource.org/licenses/mit-license.html
3. */
4. class
CopterLabs_Test
5. {
6. /**
· The
value to use in addition and subtraction
· @var
int
7. */
8. private
$_foo = 0;
9. /**
· Adds
a value to $_foo and returns the sum *
· @param
int $add_me The value to add to $_foo
· @return
int The sum of $_foo and $add_me
10. */
11. public
function add_to_foo( $add_me=0 )
12. {
13. return
$this->_foo += $add_me;
14. }
15. /**
· Subtracts
a value from $_foo and returns the difference
· @param
int $subtract_me The value to subtract from $_foo
· @return
int The difference of $_foo and $subtract_me
16. */
17. public
function subtract_from_foo( $subtract_me=0 )
18. {
19. return
$this->_foo -= $subtract_me;
20. }
21. }
Thoạt đầu, có thể bạn
nghĩ đây là một kiểu quá nhiều comment. Nhưng thực tế nó không tệ như vậy, vì
docblock được viết theo chuẩn chung. Nên khi bạn đã quen với chuẩn này, thì
việc đọc code sẽ rất dễ dàng.
Nếu như bạn sử dụng đoạn
code trên trong Netbeans (một IDE), thì đây sẽ là gợi ý code bạn nhận được, rất
tiện lợi.
8.Đừng quá khó khăn với
việc sử dụng IDE
IDE (Integrated
Development Environment) là các công cụ như Netbeans, Eclispe, Visual Studio...
Một số người cho rằng:
programmer đích thực không dùng IDE. Và đích thực theo ý của họ là gõ code ầm
ầm trong notepad, và chỉ notepad, hay các loại text editor tương tự. Lời khuyên
thật lòng là bạn không nên đầu tư công sức và thời gian để 'luyện' cho cái
'đích thực' ấy.
IDE sẽ giúp bạn làm việc
hiệu quả hơn. Bạn chắc chắn sẽ code nhanh hơn và không còn đau đầu với các lỗi
lặt vặt. Hơn nữa, khi bạn mở rộng code hay sử dụng công nghệ mới (library,
framework, language...), IDE sẽ giúp bạn rất nhiều với chức năng gợi ý code
(hinting).
9. Gom các đoạn code
tương tự vào một hàm
Khi lập trình lần đầu,
rất dễ lâm vào kiểu code từ trên xuống, và viết ngay những đoạn code cần thiết
vào phía dưới.
Với kiểu code này, bạn
sẽ dễ dàng nhận thấy nhiều đoạn code có chức năng tương tự bị lặp lại nhiều
lần. Việc này rất nguy hiểm khi bạn cần phải chỉnh sửa code, vì bạn sẽ phải dò
từng dòng để sửa các chi tiết bị lặp lại.
Nếu như bạn thấy bất kỳ
đoạn code nào có chức năng giống nhau, hãy đưa nó vào một hàm, và sử dụng hàm
đó ở những chỗ cần thiết.
Bạn hãy xem qua ví dụ
sau:
?
1. $unclean1
= '<a href="javascript:alert(\'Holy Crap!\');">Click
Me!</a>';
2. $detagged1
= strip_tags($unclean1);
3. $deslashed1
= stripslashes($detagged1);
4. $clean1
= htmlentities($deslashed1, ENT_QUOTES, 'UTF-8');
5. $unclean2
= "Let's call Björn!";
6. $detagged2
= strip_tags($unclean2);
7. $deslashed2
= stripslashes($detagged2);
8. $clean2
= htmlentities($deslashed2, ENT_QUOTES, 'UTF-8');
9. echo
$clean1, "<br />", $clean2;
Như bạn thấy, các chuỗi
$unclean1 và $unclean2 cần được xử lý trước khi sử dụng. Tuy nhiên, bạn dễ dàng
nhận thấy mỗi chuỗi được đưa qua các bước giống nhau. Và rất có thể các bước
này sẽ luôn được sử dụng mỗi khi cần in ra một chuỗi nào đó.
Đây là lúc thích hợp để
đưa chúng vào một hàm.
?
1. $unclean1
= '<a href="javascript:alert(\'Holy Crap!\');">Click
Me!</a>';
2. $unclean2
= "Let's call Björn!";
3. $clean1
= sanitize_input($unclean1);
4. $clean2
= sanitize_input($unclean2);
5. echo
$clean1, "<br />", $clean2;
6. function
sanitize_input( $input )
7. {
8. $detagged
= strip_tags($input);
9. $deslashed
= stripslashes($detagged);
10. return
htmlentities($deslashed, ENT_QUOTES, 'UTF-8');
11. }
Với việc gộp những đoạn
giống nhau vào một hàm, code sẽ dễ đọc hơn. Việc chỉnh sửa và dùng lại cũng
tiện lợi hơn rất nhiều.
10. Gộp các hàm liên
quan vào một class (lớp)
Đây là một quy trình của
lập trình hướng đối tượng (OOP), và cũng là một trong những phương pháp tốt
nhất trong lập trình.
Khi bạn có nhiều hàm với
chức năng liên quan đến nhau, hãy đưa nó vào chung một class. Việc này sẽ giúp
bạn quản lý và sử dụng code dễ dàng hơn.
Nếu như bạn có nhiều hàm
dùng để tính toán các con số, hãy đưa nó vào một class với tên gọi như
NumberCalculator. Code của bạn sẽ rõ ràng và dễ dùng hơn.
Tuy vậy, việc học hướng
đối tượng là một mảng rất rộng và bạn sẽ phải nghiên cứu nhiều hơn. Bạn nên
dành thời gian cho nó ngay từ đầu, vì đa số các ngôn ngữ lập trình phổ biến hiện
này đều ngôn ngữ lập trình hướng đối tượng.
11. Hạn chế sử dụng
Global Variable
Global vaiables là các
biến có phạm vi bao quát toàn ứng dụng, và có thể bạn đã và đang dùng nó nhiều
hơn mức cần thiết. Đây không phải là phương pháp tốt, vì thế không được khuyên
dùng. Thay vào đó, PHP cung cấp cho bạn hàm define() để tạo constants (hằng
số).
Việc sử dụng constanst
là một cách rất tốt để chứa các thông tin mang tính bao quát và cố định như tên
website hay thông tin database. Với cách này, các thông số sẽ không bị thay đổi
bằng bất cứ code nào khác. Do đó, bạn sẽ tránh được việc tình cờ khai báo lại
biến và làm thay đổi thông số ban đầu.
Ví dụ sau sẽ giúp bạn
hiểu rõ hơn:
?
1. <?php
2. define('FOO',
'constant value');
3. $bar
= 'global value';
4. echo
baz();
5. function
baz()
6. {
7. $constant
= ' Constant: ' . FOO;
8. $global
= 'Global: ' . $GLOBALS['bar'];
9. return
$constant . "<br />\n" . $global;
10. }
11. ?>
12. Đừng ngại sử dụng
Include
Include là việc bao gồm
code trong một file vào một file khác. Khi bạn làm các ứng dựng web tương đối
lớn trở lên, bạn nên chia nhỏ nó thành nhiều phần, nhiều file khác nhau., và
dùng include để sử dụng nó. Một cách phổ biến là đưa phần chung của web vào các
file nhỏ, sau đó include các fiel đó vào trang chính. Phần chung đó thường là
các bước kết nối database, đầu trang, và cuối trang. Tất cả các trang trong ứng
dụng của bạn sẽ có đầy đủ các phần chung chỉ với vài dòng code. Bằng cách này,
code của bạn sẽ gọn gàng hơn và dễ quản lý hơn.
?
1. <?php
2. //
Application-wide data and database connection
3. require_once
'constants.inc.php';
4. require_once
'database.inc.php';
5. //
Utility functions
6. require_once
'utilities.inc.php';
7. //
Header markup
8. require_once
'header.inc.php';
9. /* *
Page-specific processing goes here */
10. //
Footer markup
11. require_once
'footer.inc.php';
12. ?>
13. Không nên quá lo
lắng về hiệu năng
Hiệu năng là điều dễ làm
đau đầu mọi programmer. Thật ra bạn không nên quá lo lắng về nó, không ai có
thể phân biệt được sự khác nhau giữa 20ms hay 50ms để load một trang web. Và
việc đánh đổi những dòng code đẹp chỉ để vắt ra được 5ms không đáng tí nào.
Có thể bạn đọc được ở
đâu đó chỉ ra những điểm làm code của bạn lề mề. Chắc chắn bạn có thể làm nó
chạy nhanh hơn, nhưng hãy áp dụng nó cho những dòng code tương lai của bạn.
Đừng phí thời gian mở tung tất cả và thay đổi mọi dấu " thành dấu ' chỉ để
nhanh hơn một tí tẹo nhỏ nhoi.
Bạn chỉ cần giữ cho
trang web của bạn tốn ít hơn 700ms để load là ổn rồi. Hãy dành thời gian cho
những việc quan trọng hơn.
14. Tránh gắn kết HTML
và PHP
Chắc chắn không thể loại
bỏ hoàn toàn việc code HTML và PHP nằm chung với nhau. Nhưng bạn nên hạn chế
càng nhiều càng tốt việc HTML nằm trong PHP. Hãy loại những dòng HTML không
quan trọng ra ngoài.
?
1. echo
'<div class="example-div"><p>This is some test
content.</p></div>';
Việc đưa tag
"div" vào trong là không cần thiết, nó làm code của bạn dài hơn và
khó đọc hơn. Đưa "div" ra ngoài sẽ cải thiện đoạn code của bạn.
?
1. <div
class="example-div">
2. <?php
echo '<p>This is some test content.</p>'; ?>
3. </div>
Đây chỉ là một ví dụ đơn
giản. Bạn sẽ phải giải quyết nhiều vấn đề phức tạp hơn giữa HTML và PHP, nhất
là khi hiển thị dữ liệu từ database.
15. Cố gắng áp dụng kỹ
thuật mới cho mỗi dự án
Bạn sẽ không thể học hỏi
và phát triển nếu dùng đi dùng lại các cách cũ. Hãy cố gắng sử dụng các kỹ
thuật, công nghệ mà bạn không quen vào mỗi website.
Đừng quá tham vọng,
nhưng ít nhất đưa chân vài bước ra khỏi lãnh địa của bạn. Bạn sẽ phải tìm hiểu
và nghiên cứu để có thể hoàn thành. Điều này cũng giúp công việc của bạn đỡ
nhàm chán hơn, và lãnh địa của bạn sẽ được mở rộng.
16. Đừng ngại thay đổi
Bạn sẽ làm sai, thường
xuyên sai. Nhưng điều này không xấu.
Trong quá trình học và
làm việc, bạn sẽ phát hiện ra những điều mới hơn, hay hơn so với những thứ
trước đây bạn làm. Đừng lo, vì luôn luôn có thứ để học.
Điều quan trọng là bạn
đừng dính chặt vào lối mòn cũ. Đừng nghĩ cách của bạn tốt hơn vì bạn tự nghĩ ra
nó. Nếu bạn tình cờ phát hiện ra giải pháp hay mà so với nó, cách trước
đây bạn làm như Camry so với Cub, hãy dùng nó. Và hãy để ý những chi tiết trước
đây bạn không nghĩ tới.
17. Validate
Validate là kiểm duyệt
thông tin bạn nhận từ người dùng. Thông tin chỉ được đưa vào hệ thống sau khi
được thông qua bước kiểm duyệt.
Nếu như bạn là một nhà
phát triển web, hãy làm quen với validation càng sớm càng tốt. Việc này có thể
làm bạn mất thời gian hơn so với việc phát triển chức năng chính. Nhưng bạn
không thể bỏ qua nó nếu muốn có một ứng dụng hoàn hảo.
Với validation, người
dùng sẽ có được trải nghiệm tốt hơn trên sản phẩm của bạn. Bạn sẽ loại bỏ được
nhiều lỗi phát sinh, và dữ liệu bạn nhận được có giá trị cao hơn.
18. Dùng whitelist thay
cho blacklist
Trong nhiều trường hợp,
bạn sẽ muốn chặn các loại dữ liệu nào đó như email, từ ngữ...
Giải pháp phổ biến là
dùng blacklist, một danh sách các món mà bạn muốn chặn.
Với blacklist, bạn sẽ
phải thông minh hơn người mà bạn muốn chặn. Ví dụ, để ngăn javascript hoạt động
cho nút submit, có thể bạn sẽ chặn hành động onclick, và một số hành động khác.
Sẽ thế nào nếu bạn để sót một hành động nào đó, hay một hành động mới có thể
được đưa vào trong tương lai? Nếu bạn không trên cơ người khác trong blacklist,
sẽ có chỗ cho lỗi hay lỗ hổng.
Tuy nhiên, để đỡ mất
công, bạn hãy dùng whitelist bất cứ khi nào có thể. Ngược với blacklist,
whitelist là danh sách những thứ bạn cho phép.
Như công dụng của hàm
strip_tags(), bạn có để đặt ra các HTML tag được phép sử dụng trong chuỗi:
1.
strip_tags($string,
'<em><strong><tt>');
Với whitelist, bạn sẽ bị
giới hạn nhiều hơn, nhưng sẽ an toàn hơn rất nhiều. Rất khó để tính tới mọi
trường hợp, nên việc đặt ra "những thứ được cho phép" thay cho
"những thứ bị cấm" sẽ giúp bạn giảm bớt gánh nặng đáng kể.
19. Đếm như máy tính
Bạn không thấy cách thứ
20 ư? Vì mọi thứ trong PHP đều bắt đầu đếm từ 0,nên đây chính là điều thứ 20.
Không chỉ PHP, hầu hết mọi ngôn ngữ lập trình đều đếm từ 0. Đừng để nó làm bạn
bối rối.
Kết...
Nếu bạn mới bắt đầu với
PHP, những cách trên sẽ giúp bạn tiếp cận những thói quen và phương pháp tốt
nhất trong lập trình. Còn nếu như bạn vẫn chưa rút ra được, hãy chọn lựa một
khóa học lập
trình web trên ngôn ngữ PHP cho riêng mình.
Tin khác:
0 nhận xét:
Đăng nhận xét