Lý do nào họ sử dụng sản phẩm của bạn ?

Dùng class hay function trong PHP ?

Nếu bạn đang học PHP, hẳn sẽ phải thắc mắc rằng tại sao nhiều người viết Class trong khi một số khác có thói quen viết function ? Liệu chúng có nhanh hơn không ? Hoặc chúng có ưu điểm gì ? Hãy cùng Jam trả lời các vướng mắc trên bằng vài thông tin sau đây:

Performance

Tốc độ load của Class và Function là hoàn toàn giống nhau, bạn không thể thấy sự khác nhau giữa tốc độ, RAM hay bất kì cái gì từ Class và Function, và nếu chẳng may có, chúng sẽ cực nhỏ không thể đủ phân biệt.

Đã có nhiều bạn thắc mắc tương tự trên StackOverFlow nhưng tất cả các Dev trên này đều trả lời rằng sự khác nhau nhỏ tới mức không cần bận tâm !

Dễ phát triển và kế thừa ?

Class ăn chắc điểm trong khoản này, Class làm cho người ta dễ dàng mở rộng bằng cách viết Extend bằng một Class khác, trong khi đọc các hàm trong Class rất dễ hiểu và người khác hoàn toàn có thể kế thừa, trong khi hàm thì không thể mở rộng mà chỉ có viết thêm hàm lấy giá trị trả về của hàm cũ mà làm việc !

Đọc hàm rất khó hiểu, khó hiểu hơn đọc một Class rất nhiều !

Tránh xung đột lẫn nhau

Việc viết class sẽ giúp các hàm không xung đột lẫn nhau và với các hàm khác, với Function bạn không thể viết hai hàm giống nhau được, nhưng với các Class với nhau, chỉ cần Class khác tên là được, còn hàm trong Class có thể giống một hàm khác trong Class khác !

Đấy là lý do người ta viết hàm cần phải cho thêm tiền tố để không xung đột, ví dụ “jamPerformantTest()” để tránh các plugin hoặc các thư viện khác sử dụng hàm tương tự !

Và đấy cũng là lý do mà hàm khó hiểu hơn Class, trong Class người ta không cần lo lắng tới sự xung đột với các hàm khác!

Trong Class ví dụ “jamPerformantTest” người ta có thể có hàm “run()” hay “fetch” hoặc “Start”.

Dữ liệu khoa học

Trong Class, các biến được khai báo sẵn trong Class và trên cùng, các hàm này có thể được sử dụng trong toàn class mà không phải dùng GLOBAL hoặc Hằng …. giảm thiểu tối đa việc quét lại dữ liệu gây chậm trang, ví dụ như sau:

Class JamPreGetContent {
    protected $var; // biến này được bảo vệ
    var $content; // biến được phép access
    var $filter = array(); // khai báo sẵn 
    
    function __construct() {
        $this->var = 'function/var/pre';
        // khai báo giá trị cho $var;
    }
    function run() {
        // sử dụng lại biến $var //
        echo $this->var;
    }
    
}

Với Function thì khác nhé, để sử dụng lại các biến, giá trị … thì phải sử dụng GLOBAL ! Việc này làm cho chậm trang, tốn RAM hơn bình thường, ví dụ:

$content = 'Say Hello !';
function say_goodbye() {
global $content;
}
function say_hi() {
global $content;
}

Và khi được khai báo đồng nhất các biến trong Class, bạn sẽ thấy dữ liệu được đồng bộ hóa rất cao, tránh lặp đi lặp lại các tác vụ cũng như sai số trong dữ liệu !

Truyền biến

Trong hàm, chúng ta có cách truyền biến vào như sau:

function jam_preget_content($var1, $var2 = '', $var3 = true) {...}

Còn với Class, ta có cách truyền biến dễ dàng hơn, khoa học hơn:

$class  = new Class_example();
$class->filter('dom,data,var');
$class->get('on,en,vi,tar');
$class->Run();
echo $class->result;

Hoặc cũng có thể dùng như hàm nếu bạn muốn:

$Class = new Class($this, $is, $var);

Tổng kết

Kinh nghiệm của Jam đó là: Nếu bạn viết một hàm chỉ để làm cái tác vụ cơ bản, đơn giản thì dùng hàm, còn nếu không, các bạn phải viết Class, bởi Class mang nhiều ưu điểm hơn, mềm dẻo hơn linh hoạt hơn cho người lập trình, ngoài ra Class còn giúp nhà phát triển khác viết nối tiếp vào được bằng cách Extend nó, thậm chí chỉnh sửa cũng khá dễ dàng !

Functions do specific things, classes are specific things !

Chúc các bạn thành công !

TÁC GIẢ:

Tôi là Jam, thâm niên 7 năm thiết kế website và làm SEO. Hãy theo dõi blog của tôi để nhận được nhiều chia sẻ thú vị xung quanh chủ đề công nghệ.

Có 8 bình luận !

      1. Uhm, tôi không nói không có class thì function không chạy (vì nó như cây xanh với cả khu rừng vậy). Mà tôi nói là Class và Function không thể mang ra so sánh nhé!.
        Class có thể là đơn giản là object nhưng phức tạp thì đa dạng (OOP, struct), là thực thể đối tượng nhưng function thì khác function chỉ là duy nhất 1 việc là làm 1 thao tác nào đó hoặc 1 tổ hợp thao tác từ các cấu trúc function phức tạp kết nối từ n class hoặc đơn lẻ.
        “Function là thành phần của class hoặc class có function (thực thể)”. Thế thôi, còn class không thể định nghĩa là tập hợp của function vì class có khái niệm OOP rất rộng và phức tạp tuỳ cấu trúc, tuỳ mô hình.
        Google google!

    1. chú Kim Ngọc nói đúng còn gì.
      cảm giác thớt còn non mà ngạo mạn quá đấy
      vô tình gặp cái tit hài hài để lại vài lời cho suy ngẫm 😀
      ko hẹn gặp lại.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *