Friday, 20 May 2011

30 Nguyên tắc cơ bản cho một lập trình viên vào nghề

PHP được xem làm một ngôn ngữ được phổ rộng để tạo nên website, đơng giản, nhanh. Nhưng những nguyên tắc cho người bắt đầu tìm hiểu và học php sẽ giúp chúng ta định hướng hay nói cách khác là tìm ra được tư tưởng sáng suốt khi lập trình. Mình đọc được và dịch lại có thay đổi tí chi thích mỗi câu " I hope he doesn’t mind ".




1.Tài liệu cơ bản

Là người bắt đầu vào nghề, điều đầu tiên cũng là tìm một cuốn tài liệu đọc và học nhưng đại ca google thì làm cho chúng ta ngập ngụa, tài liệu thì nhiều nhưng sự gợi ý là vào thẳng thằng này  PHP manual. hoặc W3schools.com

2. Bật chức năng kiểm tra lỗi

Error reporting in PHP  cái này không bao giờ thừa, vì một người lập trình giỏi đến mức nào cũng không tránh khỏi lỗi và  nếu là người luôn xác định được lỗi của mình trong từng dòng code thì sẽ thế nào.

3. Thực hành trên  IDE

IDE’s (Integrated Development Environments) môi trường lập trình khá hữu dụng với các tính năng
  • syntax highlighting ( đánh dấu cú pháp)
  • code completion ( biên dịch mã)
  • error warnings ( cảnh bảo lỗi
  • refactoring (reworking)
Cùng một số thuộc tính khác, đại diện là  plenty of great IDEs .
 

4. Sử dụng PHP Framework

Đại diện  CakePHP hoặc   CodeIgniter , nhưng điều này không khuyến khích các bạn, mà chỉ nên tham khảo. Nếu không muốn thành một code script.

5. Tiếp cận DRY Approach

DRY được xem là  Don’t Repeat Yourself,  được xem à tạo cho chúng ta một kỹ năng tốt trong lập trình hay theo  Reinhold Weber:
Learn the DRY approach
Ví dụ cơ bản sẽ là
  1. $mysql = mysql_connect('localhost''reinhold''secret_hash');  
  2. mysql_select_db('wordpress'or die("cannot select DB");  
còn với  DRY approach:
  1. $db_host = 'localhost';  
  2. $db_user = 'reinhold';  
  3. $db_password = 'secret_hash';  
  4. $db_database = 'wordpress';  
  5.   
  6. $mysql = mysql_connect($db_host$db_user$db_password);  
  7. mysql_select_db($db_database);  
bạn có thể đọc nhiều hơn  DRY  tại here hoặc here. Mình thích điều này, nếu bạn có tư tưởng tạo ra đoạn code trên trước khi đọc dòng này thì đáng bái phục.

6. Thể hiện code

Thể hiện dòng code theo đúng tư tưởng của mình và tìm đọc những đoạn code của những pro bạn sẽ thấy được sự khác biệt, người có tư tưởng thoáng và tư duy hay thích cái đẹp thì những dòng code thể hiện ra làm cho người đọc dễ xác minh. Cũng không khác mấy so với người viết đẹp và viết xấu. Hãy sử dụng thành thao các dấu {} và backspace

7. “Lớp ”cho code

Đơn giản là xấy dựng các lớp cho code hay lập trình theo lớp như how to tier your PHP applications


8. Sử dụng  <?php ?>


  1. <?  
  2.     echo "Hello world";  
  3. ?>  
  4.   
  5. <?="Hello world"; ?>  
  6.   
  7. <% echo "Hello world"; %>  


9. Cách đặt tên

Tên đẹp người chưa chắc đã đẹp nhưng luôn tạo ấn tượng. Hãy sử dụng tên cho biến, lớp, hàm dễ gợi nhớ.

10. Chú thích

Đi đến đâu để lại dấu vết ở đó, hãy chú thích cho đoạn code quan trọng.

11. Cài MAMP/WAMP

Dùng server ảo MAMP (Mac) hay  WAMP (Windows). Cài đặt Mysql hoặc một số đã có PhpMyadmin cũng rất tiện để chạy thử code.
Install MAMP/WAMP

12.Thời gian thực thi code

Để xác định một khoảng thời gian nào đó để thực thi hết số code mình taọ ra thì hãy tham khảo set_time_limit
Thường thì mình để set_time_limit(0) đê cho chạy thoải mái code. 

13. Lập trình hướng đối tượng (hay  OOP)

Object-oriented programming (OOP)cơ bản là đây object-oriented programming with PHP. Nhưng mới vào mà học cái này thì nản luôn, dễ có dễ mà khó thì bình thường :)

14. Chú thích /**/ hay //

Mình thì thích dùng /**/ nó đẹp hơn và dễ nhìn hơn, đi đến đâu quan trọng thì để lại chú thích (comment) vì sau một dự án hay chỉ cần 1MB code cũng đủ hoa mắt.

15.Không nên đặt php info() đầu file

phpinfor() chỉ khi nào test thì dùng còn thường thì chẳng bao giờ mình dùng, nó cung không đẹp cho code và php nâng cấp liên tằng tằng do vậy phương án là tạo riêng một file check đủ mọi thứ :server, version

  1. <?php phpinfo(); ?>  

don't put phpinfo() in your web root

16.Đừng bao giờ tin tưởng người dùng của bạn

Bạn có chắc rằng người dùng của bạn là những người đáng tin hay kèm theo hacker phá phách thì mệt đó hãy chứng thực mọi thứ liên quan đến CSDL
  1. <?php  
  2. if (correct_user($_POST['user'], $_POST['password']) {  
  3.     $login = true;  
  4. }  
  5.   
  6. if ($login) {  
  7.     forward_to_secure_environment();  
  8. }  
  9. ?>  

17. Lưu trữ mật khẩu dạng mã hóa

Trong PHP cũng có khá nhiều hàm mã hóa có thể giúp mật khẩu hay thông tin được lưu trữ tạm an toàn.

18. Use Database Visualization Design Tools

If you’re finding it difficult to plan and modify databases for your PHP applications, you might look into using a database visualization tool. MySQL users can work with DBDesigner and MySQL Workbench to visually design your databases.
use database visualization design tools

19. Use Output Buffering

Output buffering is a simple way to greatly improve the performance and speed of your PHP script. Without output buffering, your script will show the HTML on the page as it’s processed – in pieces. Adding output buffering allows the PHP to store the HTML as a variable and send it to the browser in one chunk.
To enable output buffering, simply add ob_start() like so at the top of the file.

Rebuttal: Though not required, it’s generally considered to be a good practice to go ahead and append the “ob_end_flush();” function as well to the bottom of the document. P.S. Want to compress the HTML as well? Simply replace “ob_start();” with “ob_start(‘ob_gzhandler’)”;
Refer to this Dev-tips article for more information.

  1. <!DOCTYPE html>  
  2. <?php ob_start('ob_gzhandler'); ?>  
  3. <html lang="en">  
  4. <head>  
  5.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  6.     <title>untitled</title>  
  7. </head>  
  8. <body>  
  9.   
  10. </body>  
  11. </html>  
  12. <?php ob_end_flush(); ?>  

20. Protect your Script From SQL Injection

If you don’t escape your characters used in SQL strings, your code is vulnerable to SQL injections. You can avoid this by either using the mysql_real_escape_string, or by using prepared statements.
Here’s an example of mysql_real_escape_string in action:
  1. $username = mysql_real_escape_string( $GET['username'] );  
and a prepared statement:
  1. $id = $_GET['id'];  
  2. $statement = $connection->prepare( "SELECT * FROM tbl_members WHERE id = ?" );  
  3. $statement->bind_param( "i"$id );  
  4. $statement->execute();  
By using prepared statements, we never embed the user’s inputted data directly into our query. Instead, we use the “bind_param” method to bind the values (and escaping) to the query. Much safer, and, notably, faster when executing multiple CRUD statements at once.
Read more on creating secure PHP applications at Nettuts.

21. Try ORM

If you’re writing object-oriented PHP, then you can use the nifty object relational mapping (ORM). ORM allows you to convert data between relational databases and object-oriented programming languages. In short: ORM allows you to work with databases the same way that you work with classes and objects in PHP.
There are plenty of ORM libraries for PHP like Propel, and ORM is built into PHP frameworks like CakePHP.

22. Cache Database-Driven Pages

Caching database-driven PHP pages is an excellent idea to improve the load and performance of your script. It’s really not all that difficult to create and retrieve static files of content with the help of our good friend ob_start(). Here’s an example taken from Snipe.net:
  1. // TOP of your script  
  2. $cachefile = 'cache/'.basename($_SERVER['SCRIPT_URI']);  
  3. $cachetime = 120 * 60; // 2 hours  
  4. // Serve from the cache if it is younger than $cachetime  
  5. if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) {  
  6. include($cachefile);  
  7. echo "<!-- Cached ".date('jS F Y H:i'filemtime($cachefile))." -->";  
  8. exit;  
  9. }  
  10. ob_start(); // start the output buffer  
  11. // Your normal PHP script and HTML content here  
  12. // BOTTOM of your script  
  13. $fp = fopen($cachefile'w'); // open the cache file for writing  
  14. fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file  
  15. fclose($fp); // close the file  
  16. ob_end_flush(); // Send the output to the browser  
This bit of code will use a cached version of a page that is less than 2 hours old.

23. Use a Caching System

If you’re wanting a more robust caching system, there are a few caching scripts for PHP that might be more complete than the above example.
use a caching system

24. Validate Cookie Data

Cookie data, like any data passed on the Web, can be harmful. You can validate cookie data with either the htmlspecialchars() or mysql_real_escape_string().

25. Use Static File Caching Systems

Aside from using database caching systems like Memcached, you might also want to try a templating system to increase performance in your PHP applications. Smarty is a robust templating system has caching built into it.

26. Profile your Code

Profiling your code with a tool like xdebug can help you to quickly spot bottlenecks and other potential problems in your PHP code. Some IDEs like Netbeans have PHP profiling capabilities as well.

27. Code to a Standard

Once you’ve gotten the ropes of PHP down, you can start learning about coding to a standard. There are differences between standards out there (say Zend and Pear), and finding one and sticking with it will help with the consistency of your coding in the long run.

28. Keep Functions Outside of Loops

You take a hit of performance when you include functions inside of loops. The larger the loop that you have, the longer the execution time will take. Take the extra time and line of code and place the function outside of the loop.

Editor’s Note: Think of it this way. Try to remove as many operations from the loop as possible. Do you really need to create that variable for every iteration of the loop? Do you really need to create the function each time? Of course not. :)

29. Don’t Copy Extra Variables

Some people like to try and make their code more appealing by copying predefined variables to smaller-named variables. This is redundant and could potentially double the memory of your script. Google Code has bad and good examples of variable usage:
Bad
  1. $description = strip_tags($_POST['description']);  
  2. echo $description;  
Good
  1. echo strip_tags($_POST['description']);  

Rebuttal: In reference to the comment about “doubling the memory,” this actually is a common misconception. PHP implements “copy-on-write” memory management. This basically means that you can assign a value to as many variables as you like without having to worry about the data actually being copied. While it’s arguable that the “Good” example exemplified above might make for cleaner code, I highly doubt that it’s any quicker.

30. Upgrade to the Latest Version of PHP

While it seems like a common sense thing, many people don’t upgrade PHP as often as they should. There are lots of performance increases between PHP 4 and PHP 5. Check your server to make sure you’re up to date.

31. Reduce the Number of Database Queries

Any way that you can cut back on the number of database queries, the better your PHP script will perform. There are tools like Stace (Unix) and Process Explorer (Windows) that allow you to find redundant processes and how you might combine them.
Reduce the number of database queries

32. Don’t be Afraid to Ask for Help

It’s only human nature to want to hide the fact that we don’t know much about a certain topic. Nobody likes being a n00b! But how are we going to learn without asking? Feel free to use forums, IRC, StackOverflow to ask more seasoned PHP developers questions. The PHP website has a page on getting PHP help.
Have any rebuttals of your own? I’m sure you do! Let’s start the debate.

No comments:

Post a Comment