Skip to main content

Thủ thuật PHP dành cho người mới

Thủ thuật PHP dành cho người mới là bài viết tổng hợp các đoạn code linh hoạt và chuyên nghiệp của những đàn anh dành cho dev code PHP mới vào nghề.

Không nên sử dụng require, require_once, include và include_once

Cách mà các dev PHP thường sử dụng:

require_once('include/Configure.php');
require_once('include/Database.php');

Thay vào đó là tạo một function include file linh hoạt hơn

function include_class($class_name)
{
    //path của file class
    $path = ROOT . '/include/' . $class_name . '.php');
    if(file_exists($path)) {
       require_once( $path );
    }
}
 
include_class('Configure');
include_class('Database');

Tạo một Class cho những tính năng mang tính lặp đi lặp lại

Ví dụ mình tạo một class Rectangle để có nhiệm vụ lấy chu vi và lấy diện tích từ 2 tham số truyền vào

class Rectangle
{
    // Khai báo  properties
    public $length = 0;
    public $width = 0;
    
    // Method lấy chu vi
    public function getPerimeter(){
        return (2 * ($this->length + $this->width));
    }
    
    // Method lấy diện tích
    public function getArea(){
        return ($this->length * $this->width);
    }
}

Kết hợp dùng function require ở trên để include class này vào 


include_class('Rectangle');  // Include class

$obj_rec = new Rectangle; // Tạo object từ Rectangle
$obj->length = 30; 
$obj->width = 20; 

echo $obj->length; // 0utput: 30
echo $obj->width; // 0utput: 20
 
// gọi method từ object
echo $obj->getPerimeter(); // 0utput: 100
echo $obj->getArea(); // Output: 600

Sử dụng Switch thay vì If

Hãy sử dụng Switch thay vì các điều kiện If lặp đi lặp lại. Ưu điểm của việc này là script thực thi nhanh hơn do đó hiệu suất được tăng lên và còn linh hoạt hơn so với if-else.

if($color == 'yellow')
echo "The color is yellow";
if($color == 'black')
echo "The color is black";
if($color == 'red')
echo "The color is red";
if($color == 'pink')
echo "Color is pink";

thay đoạn code trên bằng: 

switch ($color ) {
    case 'yellow' :
        echo "The color is yellow" ;
        break ;
    case 'black' :
        echo "The color is black" ;
        break ;
    case 'red' :
        echo "The color is red" ;
        break ;
    case 'pink' :
        echo "Color is pink" ;
        break ;
}

Luôn kiểm tra sự tồn tại của biến

Luôn kiểm tra biết đã khai báo chưa hay notNULL trước khi sử dụng biến đó.

if(isset($_POST["name"])) {
 echo "Welcome ". $_POST['name'];
}

isset() function dùng để kiểm tra biết đã khai báo chưa, có NULL hay không. Nếu biến chưa được khai báo hoặc biến mang giá trị rỗng hàm sẽ trả về TRUE, ngược lại hàm trả về FALSE.

Hãy sử dụng cú phát ngắn thay cho cú pháp đầy đủ

if(!empty ( $_POST['phone'] ) {
    $phone = $_POST['phone'];
}else{
    $phone = 9111111111;
}

Thay vào đoạn code trên bằng đoạn code ngắn hơn

$phone = ( !empty ( $_POST['phone'] ) ? $_POST['phone'] : 9111111111 ) ;

Những thói quen này sẽ giúp bạn tiết kiệm thời gian hơn và chuyên nghiệp hơn.

Kiểm tra kiểm tra nhiều chuỗi

Ví dụ chúng ta cần xem thử $item có chứa một trong các ký tự 'candy', 'toy' không:

$item = "candy";

if ($item == 'candy' || $item == 'toy') {
    return true;
}else{
    return false;
}

Cách trên không sai chỉ là sẽ rất vất vã khi mà kiểm tra không chỉ 2 từ mà 1 đống từ. Đây là cách nhanh hơn:

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

 

Kiểm tra kiểu dữ liệu

Khi tham gia một dự án lớn với nhiều lập trình viên khác, nên sử dụng kiểm tra kiểu dữ liệu trước khi thực hiện function. Khi bỏ qua bước này, có thể bạn sẽ phải gặp những cái bug tốn mất vài tiếng để tìm ra lỗi chỉ vì đơn giản là kiểu dữ liệu không đúng.

function getItem($item) {
    // $itemlà một mảng
    return allItems()[$item[0]];
}

Tuy nhiên nếu bạn truyền vào một string thì function vẫn có thể chạy nhưng lại không đúng ý bạn. Ví dụng bạn truyền $item là một string 'chair', thì return sẽ là allItems()["c"]

Vậy nên bạn nên kiểm tra $item là chuỗi hay array, nếu không phải array thì nên dừng lại.

function getItem($item) {
    if (!is_array($item)) throwErr("item should be array");

    return allItems()[$item[0]];
}