Top 6 mẹo của PHP giúp anh em code tốt hơn

864

Học lập trình chính quy, bài bản, từ A tới Z nhưng đôi khi anh em quên mất ngôn ngữ lập trình nào cũng có tip và trick. Tip và trick là những lưu ý nhỏ đôi khi anh em quên mất, nhưng chính tip với trick nho nhỏ đó đôi khi lại giúp đỡ anh em rất nhiều.

Anh em lập trình PHP nên biết những trick này, biết để dùng cho đúng, đôi khi một mẹo hay đáng giá hơn ngàn lượng vàng. Ngoài ra biết mẹo đỡ mất công anh em research, xử nhanh gọn vấn đề tiết kiệm thời gian.

mẹo PHP
Cho vui thôi chứ PHP vẫn đáng yêu nha anh em. Làm web mà ko có PHP thì hết zui.

Bắt đầu thôi anh em, có trick nào hay thì lưu lại, hoặc bookmark cả bài viết sau mà tìm kiếm cho dễ nha!

1. If và else

Tips và trick này là đơn giản và phổ biến nhất khi anh em làm việc với PHP. Thông thường nhiều anh em sẽ thấy tip này trước đây nhưng chưa chú ý lắm. Nói chung if mà đi với else thì không có gì sai.

Rõ ràng là sinh ra if để đi với else, trước nay vẫn thế, tuy nhiên đôi khi else là dư thừa không cần thiết. Anh em xem thử ví dụ sau đây:

function output_gender(bool $user_is_male) {
    if ($user_is_male) {
        return "User is male";
    } else {
        return "User is female";
    }
}

Trong trường hợp này kết quả đầu ra sẽ tuỳ thuộc vào biến $user_is_male, giá trị true hay false. Lúc này else rõ ràng là dư thừa do return đã có ở trong, nếu đúng thì đã return và trả về code, không có gì phải else.

Viết lại ngắn gọn rõ ràng súc tích hơn như sau:

function output_gender(bool $user_is_male) {
    if ($user_is_male) {
        return "User is male";
    }

    return "User is female";
}

Tip này tuy nhỏ, nhiều anh em có thể biết rồi nhưng cho những anh em mới, tip này sẽ khá là bổ ích

mẹo PHP
Nguồn ảnh/ Source: detriamelia.com

2. Verifying multiple strings

Giả sử anh em muốn kiểm tra xem chuỗi string thuộc về case nào trong các case. Thường sử dụng switch case anh em sẽ viết như sau:

$item = "candy";

switch ($item) {
    case 'candy':
        return true;
    case 'toy':
        return true;
    default:
        return false;
}
// we're not adding break because we're using return

// or
if ($item == 'candy' || $item == 'toy') {
    return true;
}

return false;

Đoạn code này sẽ trả về true nếu chuỗi là candy hoặc toy . Cách viết này hoàn toàn là đúng, không có gì sai nha anh em. Tuy nhiên cách viết này lặp đi lặp lại khá mất công sức. Thay vào đó anh em có thể sử dụng array

if (in_array($item, ["candy", "toy"])) {
    return true;
}

return false;

Thâm chí không cần cả if và else, chỉ một dòng duy nhất

return in_array($item, ["candy", "toy"]);

Cũng có một cách khác anh em có thể viết ngắn gọn như sau:

return ($item == 'candy' || $item == 'toy');

  Cài đặt môi trường lập trình web PHP

  Substr trong php là gì? Ví dụ về substr

3. Hai dấu hỏi (??)

Anh em làm việc lâu với php chắc không còn lạ gì với double question mark. Đây là cách nhanh nhất để viết điều kiện if else trong code php. Anh em cùng xem qua ví dụ sau về mẹo PHP:

$data = [
    "a" => 1,
    "b" => 2,
    "c" => null,
];

return $data["c"] ? $data["c"] : "No data";

Dòng cuối cùng này kiểm tra xem c có ở trong mảng data hay không?. Nếu không tồn tại sẽ trả về No data. Đống code loằng ngoằng khó chịu này có thể gom lại thành 1 dòng.

return $data["c"] ?? "No data";

Trường hợp này hai dấu hỏi ??, tương tự với || ở các ngôn ngữ lập trình khác. Tip này tuy đơn giản nhưng hữu ích và có thể nhiều anh em đã biết rồi. Tuy nhiên một số anh em có thể chưa biết nên lưu lại nhé.

Xem ngay tin tuyển dụng PHP lương cao trên TopDev

4. PHP và HTML

Trong quá trình làm dự án có cả FrontendBackend, không tránh khỏi những lúc anh em muốn viết PHP trong HTML và HTML trong PHP. Thông thường anh em sẽ thực hiện mẹo PHP này như sau:

<?php
foreach ($items as $item) {
    echo '
        <div class="product__card">
            <h3>{$item->name}</h3>
        </div>
    ';
}
?>

Code này thì khá là rõ ràng, tuy nhiên HTML kiểu này anh em thường viết theo string. Mà viết theo string thì hay nhầm lẫn, thiếu tag, sai syntax các kiểu. Có một tips anh em có thể thử:

<?php foreach ($items as $item): ?>
    <div class="product__card">
        <h3><?php echo $item->name; ?></h3>
    </div>
<?php endforeach; ?>

Trường hợp có nhiều if else và for each, anh em có thể maintain theo cách sau:

foreach (...):
// code
endforeach;

// also works with if
if (...):
// code
endif;

// also
if (...) #one line code

while():
// ...
endwhile;

PHP mix với HTML chưa bao giờ là dễ

mẹo PHP
Nguồn ảnh/ Source: stackoverflow.com

5. Functional blocks

Function block (khối function), có thể là một tính năng đơn lẻ hoặc một tác vụ phức tạp, như ví dụ dưới đây anh em có thể viết function gọn nhẹ redirect to:

function redirectTo($route) {
    header("location: $route", true, 302);
}

Với các function kiểu này, mỗi khi anh em muốn redirect tới home thì chỉ cần gọi function redirectTo. Thay vì header("location: /home", true, 302) anh em chỉ cần gọi function redirectTo("/home"). Viết function kiểu đó vừa gọn nhẹ, vừa clear. Code cũng tái sử dụng tốt hơn.

Ý tưởng này anh em cũng có thể apply cho gửi function và nhiều tác vụ khác. Đơn cử như gửi notification dưới đây.

UserNotification::send($user_id, $notification);

Mẹo PHP này tuy nhỏ nhưng khá bổ ích, anh em nhớ note lại nha.

6. Đệ quy và sự lặp lại

Mục đích của mẹo PHP này khá đơn giản, anh em nên cố gắng sử dụng đệ quy càng nhiều càng tốt. Thay vì lặp lại quá nhiều, cứ khi nào thấy quá nhiều thì cố gắng sử dụng đệ quy.

/**
 * Returns request data
 *
 * This methods returns data passed into the request (request or form data).
 * This method returns get, post, put patch, delete or raw faw form data or NULL
 * if the data isn't found.
 *
 * @param string|array $params The parameter(s) to return
 * @param bool $safeData Sanitize output
 */

Hàm này trả về array hoặc string tuỳ theo input đầu vào. Giải pháp là nếu đầu vào là array thì sẽ loop từng item trên array đó.

public function get($params, bool $safeData = true)
{
    if (is_string($params)) return $this->body($safeData)[$params] ?? null;

    $data = [];
    foreach ($params as $param) {
        $data[$param] = $this->body($safeData)[$params] ?? null;
    }
    return $data;
}

Sẽ có một đoạn lặp đi lặp lại là $data[$param] = $this->body($safeData)[$params] ?? null;. Thay vì lặp foreach kiểu đó, anh em có thể sử dụng đệ quy:

public function get($params, bool $safeData = true)
{
    if (is_string($params)) return $this->body($safeData)[$params] ?? null;

    $data = [];
    foreach ($params as $param) {
        $data[$param] = $this->get($param, $safeData); // I called the function again
    }
    return $data;
}

7. Tham khảo

Ngoài ra anh em có thể tham khảo thêm một số mẹo PHP khác:

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Có thể bạn quan tâm: