Tối ưu khi viết code PHP - Phần 2

Thảo luận trong 'Lập Trình PHP' bắt đầu bởi lebichvan888, 21/9/15.

  1. 1. Đi tìm bản chất vấn đề
    Có nhiều bạn, dù là mới học hay đã có kinh nghiệm thực tiễn vẫn hỏi tôi "PrintEcho khác nhau thế nào". Tôi "đớ" người ..., mà cũng thiệt vậy, trên lớp tôi hay nhắc đi nhắc lại cái chân lý: "Không bao giờ có 2 cái cùng tồn tại mà y xì nhau như đúc, dù là 2 giọt nước, chắc chắn nó phải có điểm khác nhau". Và tôi suýt sụp vào cái hố do chính mình đào ra.

    PHP Không tồn tại cái gọi là "Command" mà nó chỉ tồn tại một hình thái duy nhất là "Function", bởi lẽ nó là Middle ware. Có bao giờ bạn thắc mắc trình biên dịch PHP được lập trình bằng ngôn ngữ gì không ? Download bản PHP for Linux mở ra là thấy ngay. Hay nói cách khác mọi hoạt động của PHP Environment đều nằm trong đó. Và bạn - PHP Developer nằm ở tầng trên, cuối cùng mới là người dùng tương tác ứng dụng mà bạn viết ra (End user - người dùng cuối).

    Và cho dù bạn có tự gọi mình bằng bất kỳ cái tên mỹ miều nào đó như: PHP Developer, PHP Programmer, PHP Coder v.v... thì bạn thực ra cũng chỉ là một User không hơn không kém. Bạn không phải là người tạo ra thế giới mà là người phát triển thế giới từ cái nền PHP đã có sẵn.

    2. Yêu "echo" nhưng tơ tưởng "print"
    Và điều đó có nghĩa là, 2 em này khác nhau.
    Thông thường chúng ta hay viết code dạng như sau:

    Mã:
    $str1 = "Hello"; // Lời chào
    $str2 = "Metz"; // Chủ ngữ
    $str3 = "How are you?"; // Vị ngữ
    
    Và ghép nó để xuất ra ngoài:


    Mã:
    echo $str1.$str2.$str3;
    Hoặc
    print $str1.$str2.$str3;
    
    "Tín đồ C giáo" hay dùng print, và họ có thói quen dùng "print". Tuy nhiên, đây là hình thái "dễ dãi" của PHP, nó là một ngôn ngữ lãng tử thật sự.

    Hãy nhớ lại: PHP Không tồn tại cái gọi là "Command" mà nó chỉ tồn tại một hình thái duy nhất là "Function"Cho nên phải thực sự là:



    Mã:
    echo($str1.$str2.$str3);
    print($str1.$str2.$str3);
    
    Tuy nhiên, điều đáng nói ở đây, dấu "." nghĩa là nối chuỗi, và bạn vô tình tạo ra thêm 2 tác vụ nối chuỗi cho ứng dụng. Và chúng ta thử


    Mã:
    echo $str1,$str2,$str3;
    print $str1,$str2,$str3; // Lỗi
    
    Chúng ta có 2 vấn đề cần quan tâm:

    • echo nhanh hơn print, cho một tác vụ thông thường, chúng ta tốn 450ms cho echo và 550ms cho print.
    • echo tối ưu hơn print ở cơ chế xuất ra multiple times, hay nói cách khác là echo xuất ra nhiều đối số vào hàm, còn print thì không.
    Tips: tôi chả hiểu "thánh" nào bày ra cái vụ "print" này trong PHP nữa. Hãy cứ chung thủy với echo các bạn nhé.

    3. Thói quen lười nhác
    Nháy đơn (') và nháy đôi (") là một mối tình khó hiểu, lung tung lang tang không bờ bến.

    Mã:
    $a = 2;
    echo "Đây là $a"; // Đây là 2
    echo 'Đây là $a'; // Đây là $a
    echo 'Đây là '.$a; // Đây là 2
    
    Thế ta dùng (") cho lành, dùng (') chi cho mắc công nối chuỗi nhỉ. Như bạn thấy, dấu (") có tác dụng nhốt chuỗi khi xuất ra hay khi thể hiện một giá trị, và đồng thời nó sẽ dò tìm bên trong nó để xác định đâu là biến để thay thế giá trị cho biến. Tôi không cần thiết phải nói đến sự tối ưu gì hay không, bạn chắc phải cảm nhận được cái nào thật sự nhanh hơn. Giống như:

    • Ra đầu ngõ mua cho tui ổ bánh mì, đói quá.
    • Ra đầu ngõ mua cho tui ổ bánh mì, sẵn tiện trên đường đi để ý chỗ nào bán cafe mua dùm một ly luôn.
    02 công việc này, bạn sẽ tiến hành cái nào nhanh hơn. Và đây gọi là sự tồi tệ hơn khi quên luôn dấu nháy:


    Mã:
    echo email;
    echo metzdown;
    
    Ví dụ này sẽ xuất ra ngoài: emailmetzdown
    Nó sẽ tuyệt vời và tôi hy vọng là trước đó bạn không có quên khi define một hằng:

    define('email',' phoenix@duc.com');

    Và thảm họa: phoenix@duc.commetdown;

    Tips: Chung quy lại, chúng ta sẽ viết như thế này là tốt nhất:


    Mã:
    echo 'Đây là '.$a; // Đây là 2
    
    SAI RỒI, ĐỌC LẠI BÀI SỐ 1 ĐI NÀO. ỨNG DỤNG NGAY ĐI CHỨ, NÓ PHẢI THẾ NÀY:

    Mã:
    echo 'Đây là ',$a; // Đây là 2
    
    --

    GV Huỳnh Công Đức

Chia sẻ trang này