[Translate] 5 Part PHP Cheat Sheet

PHP có lẽ là ngôn ngữ lập trình kịch bản hay một loại mã lệnh phổ biến nhất cho lập trình viên web nhờ khả năng mở rộng tốt vượt ra ngoài việc chỉ xây dựng website. Tất nhiên, với khả năng mở rộng nhiều như vậy thường đi kèm với điều kiện phải học hỏi rất nhiều. May mắn rằng, trang PHP dễ hiểu với những người mới bắt đầu lập trình, mà vẫn đủ mạnh cho lập trình viên chuyên nghiệp.

Danh sách dài những khả năng đó ban đầu có vẻ khá đáng sợ, tuy nhiên, bất kỳ ai dù với kiến thức lập trình ít ỏi cũng có thể viết được mã PHP đơn giản. Điều đó nói lên rằng, không ai mong đợi có thể trở thành chuyên gia chỉ sau có 1 đêm, nên bộ "Ăn gian với PHP" - PHP Cheat sheet này sẽ giúp những người mới bắt đầu có thể "chuyên nghiệp" hơn 1 chút 😄

I. Cơ bản về PHP

Trong trường hợp bạn cần 1 khóa học vỡ lòng khẩn cấp, thì phần này sẽ giúp bạn bao quát được những điều cơ bản nhất trong PHP.

Không giống như JavaScript - ngôn ngữ phía người dùng - client side, PHP được thực thi trên server, và trả ra mã HTML để gửi tới client. Vì thế, client nhận được kết quả của đoạn mã chứ không phải là đoạn mã gốc. Điều này khả thi khi cấu hình máy chủ của bạn có thể xử lý tất cả các file HTML với PHP để người dùng không thể nào biết được những gì được viết phía dưới.

Mã PHP được nhúng vào HTML và phải được đặt trong cặp thẻ đóng mở khối mã: <?php?>, giống như ví dụ được lấy dưới đây: (Đoạn code này sẽ cho output là: "PHP goes here!")

<!DOCTYPE html>
<html>
<head>
    <title>First Example</title>
</head>
<body>
    <?php
        echo "PHP goes here!";
    ?>
</body>
</html>

Lệnh echo cho phép bạn trả ra output là chuỗi, và chuỗi đó được viết trong cặp dấu nháy và kết thúc bởi dấu chấm phẩy ;

Theo như trang W3techs, hơn 75% web servers được viết bằng PHP. Tuy nhiên, vì PHP là ngôn ngữ mã nguồn mở vốn có sự phát triển nhanh chóng chứ không phải được cố tình thiết kế như vậy ngay từ đầu, nên thiết kế ứng dụng rất dễ có nhiều lỗ hổng bảo mật. OWASP có 1 bản cheat an ninh khá hay giúp đảm bảo nền tảng ứng dụng PHP của bạn bảo mật hơn.

II. PHP Modes

Mã PHP được xử lý bằng nhiều cách, bao gồm cả Apache module, CGI và FastCGI. Nếu bạn đang sử dụng PHP cho dự án, phần này có thể giúp bạn biết nên bắt đầu từ đâu. Có nhiều lựa chọn thay thế khác, nhưng dưới đây là những cách thường dùng:

1. mod_php (Apache Module)

Sử dụng mod_php nhúng trình thông dịch PHP vào mỗi quy trình Apache khi nó sinh ra. Vì thế, không cần thêm quy trình bên ngoài nào bởi Apache đã tự xử lý mã PHP rồi. Việc này vô cùng hữu ích đối với các trang web mà hay phải nhận những request PHP lớn như WordPress, Drupal hay Joomla. Trình thông dịch lưu lại thông tin, nhờ đó mà những công việc tương tự không cần phải bị lặp lại mỗi lần xử lý mã. Đổi lại thì tiến trình Apache lưu lại lượng lớn dấu vết thông tin nên sẽ gây tốn bộ nhớ hơn.

Lợi ích của mod_php

  • Không cần thêm quá trình bên ngoài nào
  • Hiệu suất cao cho website chứa nhiều mã PHP
  • High performance for websites with a lot of PHP
  • Cài đặt có thể được cấu hình và điều chỉnh với chỉ thị của .htaccess

Hạn chế của mod_php

  • Trình thông dịch PHP vẫn phải thực thi kể cả khi không xuất hiện mã PHP
  • Vì các file chứa mã PHP thường đều do web server sở hữu, nên bạn không thể thường xuyên chỉnh sửa thông qua FTP sau này được.

2. CGI

Sử dụng ứng dụng CGI để xử lý mã PHP được coi là cách cổ, nhưng nó vẫn tiện lợi với 1 số mục đích. Lợi ích lớn nhất khi sử dụng CGI đó là việc xử lý mã được tách biệt với server của bạn. Vì trình thông dịch PHP chỉ được gọi đến khi cần, nên những nội dung tĩnh vẫn được an toàn ở trên server của bạn. Tuy nhiên, do 1 tiến trình mới phải được tạo ra mỗi khi mã PHP được sử dụng, nên chế độ này tiêu tốn tài nguyên rất nhanh. Nhờ thế, CGI không được khuyến khích sử dụng trong các dự án cần trao đổi nhiều mã PHP.

Lợi ích của CGI

  • Bảo mật hơn mod_php

Hạn chế của CGI

  • Tiêu tốn hiệu năng

3. FastCGI

FastCGI cho phép tận dụng cả sự bảo mật của CGI lẫn hiệu năng của Mod_php. Mã lệnh được xử lý bới trình thông dịch bên ngoài server, và mỗi request chuyển từ server qua FastCGI thông qua 1 network socket. Sau đó, Server và trình thông dịch PHP có thể sẽ tách thành các môi trường riêng biệt, nhờ đó cải thiện khả năng mở rộng. Sử dụng nginx kết hợp với mod_php cũng có thể đạt được hiệu quả tương tự, nhờ vậy mà nginx có thể xử lý được hầu hết các request tĩnh. Hạn chế của việc sử dụng FastCGI là không thể sử dụng các lệnh PHP đã được xác định trong file .htaccess, điều mà nhiều mã lệnh phổ biến yêu cầu có. Nếu bạn đang sử dụng Plesk Panel server, bạn có thể xử lý vấn đề này bằng cách cài đặt file php.ini để điều hướng PHP trên cơ sở từng tên miền.

Lợi ích của FastCGI

  • Cho phép bảo mật hơn mod_php
  • Các nội dung tĩnh không cần qua trình thông dịch PHP xử lý
  • Files có thể được quản lý bới người dùng FTP không cần phải thay đổi quyền truy cập.

Hạn chế của FastCGI

  • Điều hướng được định ra trong file .htaccess không thể sử dụng được nếu không xử lý lại
  • Request PHP phải truyền qua server

Nếu bạn đang làm việc với 1 dự án nhỏ, thì cứ thoải mái chọn các xử lý nào mà bạn muốn. FastCGI là lựa chọn phù hợp nhất để chạy ứng dụng CMS như wordpress, trong khi mod_php lại tốt hơn nếu bạn chỉ cần dựa các điều hướng của file .htaccess, hoặc muốn có biện pháp bảo mật tốt hơn.

III. PHP Functions

Các functions (hàm) đại diện cho các đoạn mã được sử dụng thường xuyên, nhờ đó bạn không cần phải liên tục copy và paste cùng một đoạn mã lặp đi lặp lại nhiều nơi. Tuy nhiên làm vậy sẽ khó mà bao quát toàn bộ danh sách dài các hàm trong 1 file mã được. Thay vào đó, bạn sẽ cần tìm 1 bộ PHP cheat có thể phục vụ bất kỳ mục đích nào mà bạn cần. Phần này sẽ cung cấp cho bạn những giải thích cặn kẽ của các function thường dùng.

1. Thao tác với String

strlen()

Hàm strlen() nhận vào 1 chuỗi hay 1 biến và trả về số lượng các ký tự trong đó, bao gồm cả ký tự khoảng trắng. Ví dụ:

<?php
    $name = "Luke Perry";
    echo strlen($name); // 10
?>

substr($string, $start, $length)

Hàm substr() trả về 1 đoạn của chuỗi đầu vào. Hàm này gồm có 3 tham số đầu vào mà bạn phải truyền:

  • Tham số đầu tiên là $string, chính là tên biến chứa chuỗi mà bạn cần trích xuất thông tin.
  • Tham số thứ 2 là $start, xác định vị trí ký tự mà bạn muốn bắt đầu trích xuất, thứ tự vị trí bắt đầu từ 0 ứng với ký tự đầu tiên trong chuỗi, và cứ thế. Nhập vào số âm thì hàm sẽ bắt đầu đếm ngược lại từ cuối của chuỗi đó đổ lên.
  • Tham số cuối cùng là $length, xác định số lượng ký tự bạn muốn trích xuất kể từ vị trí $start. Nếu không truyền vào biến $length, hàm sẽ mặc định trả về tất các ký tự còn lại phía sau vị trí $start. Nếu giá trị của $length nhỏ hơn hay cùng giá trị với $start, thì hàm sẽ trả về false

Theo như trên, hàm sẽ hoạt động như sau:

<?php
    $name = "Luke Perry";
    echo substr($name, 0, 3); // Luk
    echo substr($name, 1); // uke Perry
    echo substr($name, -4, 3); // err
?>

strtoupper() & strtolower()

Hàm strtoupper() sẽ chuyển tất cả các ký tự có trong chuỗi truyền vào thành dạng in hoa (UPPERCASE, ngược lại, hàm strtolower() chuyển tất cả các ký tự trong chuỗi thành ký tự viết thường (lowercase), phục vụ cho xử lý 1 số trường hợp nhất định. Ví dụ như sau:

<?php
    $name = "Luke";
    echo strtoupper($name); // LUKE
    echo strtolower($name); // luke
?>

strpos($haystack,$needle,$offset)

Hàm strpos() giúp tìm kiếm vị trí xuất hiện của 1 chuỗi con trong 1 chuỗi lớn hơn. Có 3 tham số như sau:

  • $haystack, là chuỗi chính, đối tượng mà bạn muốn tìm bên trong đó
  • $needle là chuỗi con các ký tự mà bạn muốn tìm. Nếu chỉ truyền vào 2 tham số này sẽ trả về vị trí (dạng số) xuất hiện lần đầu tiên của chuỗi con.
  • $offset là tham số không bắt buộc truyền vào. Tham số này chỉ vị trí trong chuỗi mẹ mà bạn muốn bắt đầu tìm kiếm, vậy nên không thể truyền vào số âm. Lưu ý cách trong ví dụ cuối cùng, kết quả trả về là false vì hàm có phân biệt chữ hoa chữ thường:
<?php
    $name = "Luke Perry";
    echo strpos($name, "L"); // 0
    echo strpos($name, "e Perry"); // 3
    echo strpos($name, "p"); // false
?>

Hàm strpos() cũng có thể sử dụng kết hợp với câu lệnh if như sau:

<?php
    $string = "I am a string.";
    $search = "PHP";
    if (strpos($string, $search) === false) {
        echo "Sorry! '$search' cannot be found in '$string'.";
    }
?>

Đoạn code trên sẽ trả về dòng chữ “Sorry! ‘PHP’ cannot be found in ‘I am a string.’”

2. Hàm xử lý số học (Arithmetic Functions)

round($val, $precision, $mode)

round() như cái tên hàm thì chức năng của nó là sử dụng để làm tròn các số thập phân. Bạn có thể sử dụng để làm tròn lên hay làm tròn xuống hoặc làm tròn đến chữ số xác định sau dấu phẩy, và giống mấy hàm trên, hàm này có 3 tham số truyền vào:

  • $val là số mà bạn muốn làm tròn
  • $precision: tham số này không bắt buộc, nó chỉ ra vị trí phần thập phân (chữ số thứ mấy sau dấu phẩy) mà bạn muốn làm tròn tới.
  • Cuối cùng là tham số $mode xác định cách làm tròn. Có 4 cách làm tròn: PHP_ROUND_HALF_UP(làm tròn lên), PHP_ROUND_HALF_DOWN (làm tròn xuống), PHP_ROUND_HALF_EVEN (làm tròn thành chữ số chẵn kế tiếp) và PHP_ROUND_HALF_ODD (làm tròn thành chữ số lẻ kế tiếp). Bạn có thể tham khảo thêm thông tin làm tròn số và các hàm khác trong Hướng dẫn sử dụng PHP.

Có 2 hàm toán học khác cũng xử lý làm tròn số, là hàm ceil()floor(), làm tròn lên và tròn xuống tương ứng. 2 hàm này cung cấp cách thức đơn giản hơn để có thể làm tròn tới số nguyên gần nhất, như ví dụ sau:

<?php
    $number = 7.55686878;
    echo
    ceil($number); // 8
    floor($number); // 7
?>

3. Lấy ra số ngẫu nhiên

rand($min, $max)

Hàm rand() trả về 1 số ngẫu nhiên trong khoảng giữa 2 số đc truyền vào. 2 tham số này đều không bắt buộc. Tham số $min xác định số nhỏ hơn trong khoảng số cần random, còn $max xác định số lớn nhất trong khoảng số đó. Nếu không có tham số đưa vào, mặc định $min = 0$max sẽ trả về getrandmax() - random 1 số làm số lớn nhất. Ví dụ minh họa:

<?php
    echo rand(); // 15748
    echo rand(); // 490
    echo rand(7, 9); // 7
?>

Vì 1 vài lý do, 1 số hệ thống Windows tự động gán getrandmax() = 32767, nhưng mà bạn hoàn toàn có thể tự định lấy số $max lớn hơn số đó nhé.

4. Một chút vui vẻ với hàm xử lý mảng - Array Functions

Tất nhiên là array() cho phép bạn lưu trữ nhiều giá trị trong 1 biến, nhưng bạn sẽ cần ghi nhớ khác nhiều hàm xử lý mảng đấy.

array_push($array, $value1, $value2)

array_push() sẽ thêm các giá trị mới vào cuối của mảng. Bạn sẽ phải chọn mảng để truyền vào đã có ít nhất 1 giá trị bên trong. Không có giới hạn nào cho số lượng giá trị mà bạn có thể thêm vào.

<?php
    $states = array();
    $array = array_push($states, "Montana");
    $array = array_push($states, "North Carolina");
    $array = array_push($states, "California");
    echo $array; // returns 3
    var_dump($states);
?>

Có 1 cách dễ hơn để làm việc trên, đấy là liệt kê tất cả phần tử và thêm vào mảng trong 1 lần gọi hàm. Ví dụ như sau:

<?php
    $states = array(); // target array
    $array = array_push($states,
    "Montana",
    "North Carolina",
    "California");
    echo $array; // returns 3
    var_dump($states);
?>

2 ví dụ trên sẽ có kết quả trả ra giống nhau. Bây giờ, nếu gọi echo array_push();, nó lại trả về số lượng biến được đẩy vào mảng. Nếu sau đấy gọi var_dump() thì sẽ trả về kết quả như sau:

array(3) {
    [0] => string(7) "Montana"
    [1] => string(14) "North Carolina"
    [2] => string(10) "California"
}

sort($array, $sort_flags)

Hàm sort() là 1 hàm xử lý mảng khác sẽ thực hiện cộng việc giống như tên của nó - sắp xếp. Sau khi chỉ định mảng cần được sắp xếp, bạn sẽ cần chọn cách sắp xếp mảng bằng cách xác định giá trị biến $sort_flags. Có thể tham khảo hướng dẫn sử dụng $sort_flags nhé. Hàm sẽ mặc định sắp xếp theo bảng chữ cái hoặc chữ số nhé.

<?php
    $states = array(
        "Montana",
        "North Carolina",
        "California"
    );
    sort($states); // array to sort
    echo join(", ", $states);
    //output - California, North Carolina, Montana
?>

rsort($array, $sort_flags)

Hàm rsort() tương tự với hàm sort() nhưng nghịch đảo lại. The rsort() function does the same thing as sort() but in reverse. For example:

<?php
    $states = array(
        "Montana",
        "North Carolina",
        "California"
    );
    rsort($states); // array to sort
    echo join(", ", $states);
    //output - Montana, North Carolina, California
?>

join($glue, $array) or implode($glue, $array)

Hàm join() sẽ tạo ra 1 chuỗi mới dưới dạng ghép các phần tử của mảng đầu vào với nhau. Hàm implode() cũng cho phép bạn làm điều tương tự, nên cả 2 hàm đều có cùng quy tắc sử dụng.

Tham số đầu tiên, $glue không bắt buộc phải có, tham số này là thứ phân cách các giá trị. Trong ví dụ trên, $glue là dấu phẩy. Tham số thứ 2 thì tất nhiên là mảng mà bạn muốn ghép rồi.

Ví dụ thêm:

$glue = ' , ';
$array = ['Tokyo', '39', 'New York', 'Sun'];

$output = join($glue, $array);
echo $output; 

Kết quả trả về:

Tokyo, 39, New York, Sun

5. Hàm PHP nâng cao

Đây là Tài liệu nâng cao về PHP function, Envato cũng có 1 danh sách các hàm hữu dụng trong PHP mà ít người biết nữa đấy. Envato has a useful list of some lesser known capabilities of PHP.

IV. PHP Commands

PHP có tất cả các lệnh điều khiển mà bạn mong chờ ở 1 ngôn ngữ lập trình kịch bản, tức là có quá nhiều thứ để có thể đi sâu vào trong chủ đề này. May mắn thay, '1keydata' có 1 hướng dẫn sử dụng lệnh PHP rất hay để có chúng ta có thêm các thông tin khác về cách sử dụng PHP sao cho tận dụng được tối đa.

V. Các nguồn PHP Cheat Sheet khác

Các bạn có thể tìm thấy hàng tá các PHP cheat sheet khác cho tất cả các mục đích khac nhau khắp nơi trên mạng. Prophet Hacker có 1 danh sách dài, nhưng không có nhĩa là nó là những hướng dẫn phổ biến nhất. Dưới đây là 1 vài biểu đồ đáng chú ý cho các bạn tham khảo:

PHP cheat sheet với các hàm cơ bản, cú pháp, xử lý ngày tháng, ...

Nguồn: Cheat-sheets

PHP cheasheet dành riêng cho Wordpress

Source: Quicklycode

Nếu bạn không sử dụng hoàn toàn PHP cho mọi dự án bạn làm, thì rất dễ quên đi 1 số thứ. Bài viết này nhằm cung cấp nhanh cho bạn một tài liệu tham khảo dành cho các tính năng và chức năng PHP được sử dụng thường xuyên nhất. Hãy thoải mái xem lại bất cứ lúc nào bạn cần bồi dưỡng thêm.

Tài liệu gốc