Tưởng là trick nhưng hóa ra lại là "chick"

Tưởng là trick nhưng hóa ra lại là "chick"

Rảnh rỗi mò xem PHP có những trick & tip gì thú vị không. Dù gì mình cũng là PHP đì vi lớp per mà (o˘◡˘o)

Cùng xem lại những trick được thiện hạ đồn nào.

1. Using isset() instead of strlen()

$string = "some kind of string";
// we were proposed to replace this 
$stringIsLongerThan5 = strlen($string) > 5;
// to this 
$stringIsLongerThan5 = isset($string[6]);

Works. But weird.

Có vài bài post cho rằng việc sử dụng isset thay cho strlen() có tăng performance và tăng đến 40% boost Σ(O_O). (Codepad test) Nhưng phải chú trọng 1 điều các test chỉ nằm trên local và thực hiện trên version PHP 5.6. Và trick cứt gà này có vẻ như không còn hiệu quả khi sử dụng trên các version PHP cao hơn. Vì giờ đây thì tốc độ xử lý của cả 2 là gần như nhau, nên việc viết code tường minh dễ hiểu quan trọng hơn nhiều.

2. Using single quotes instead of double

Đây là 1 trong những cái trick mà mình thấy nhiều nhất. Thực ra coi nó như lời khuyên thì tốt hơn và sự chênh lệch performance giữa việc dùng single quotes và double quotes không quá lớn.

$name= 'Phong';
$age= "24";
$full = "I am {$name}, {$age} year old".

Việc xử lý string đã được improved từ version PHP 7.0, nên coi như cái trick này không cần thiết. Tuy nhiên, theo mình thấy thì việc sử dụng single quotes hay double tùy thuộc vào coding rule, và để phân biệt thì nên sử dụng single quotes cho tất cả các chuỗi, và chỉ sử dụng double quotes khi muốn pass a variable inside.

3. Using concatenation instead of template strings

Khá là giống cái trên. Sử dụng template strings sẽ chậm hơn so với sử dụng simple strings, nên các lập trình viên quyết định sử dụng nó thay vì template strings. Nhưng mà performance là 1 chuyện, còn tính thẩm mĩ thì sao (・Θ・)

$name= 'Phong';
$age= '24';
// Template
$full = "I am {$name}, {$age} year old".
// simple
$full = "I am " . $name . ", " . $age . "year old".

Và 1 lần nữa, việc sử dụng concatenation không cần thiết sử dụng nếu bạn mong muốn cải thiện performance nữa vì sau PHP 7+, việc sử dụng template strings đã nhanh hơn, và thậm chí là nhanh hơn so với concatenation. Mình có tìm được 1 bài post của 1 contributor of PHP ở đây. Hơn hết là dùng template nó "đệp" hơn :v

4. Using a “For” loop instead of a “Foreach”

// 1.
foreach ($array as &$item) {
    $item = process($item);
}
// 2.
$size = count($array);
for ($i = 0; $i < $size; $i++) { 
    $array[$i] = process($array[$i]);
}

Cái này thì oke. Thực tế thì hiện tại trên các version PHP, vòng for luôn nhanh hơn foreach. BUT, với một mảng lớn thì chẳng ai lại dại khờ sử dụng vòng for đúng không nào. Và việc cố gắng sử dụng trick trên chỉ khiến code của bạn khó đọc hơn mà thôi.

À mà nhớ là đừng có cố gắng việc gọn lại mà bỏ count vào trong vòng for như vậy nhé.

// don't do this, pls.
for ($i = 0; $i < count($array); $i++) { 
    $array[$i] = process($array[$i]);
}