1. Lịch sử hình thành

PHP (PHP: Hypertext Preprocessor) là một ngôn ngữ lập trình server-side được thiết kế để:

  • Xử lý request HTTP
  • Tương tác database
  • Trả về HTML, JSON

Năm 1994 PHP được tạo ra bởi Rasmus Lerdorf dùng để mục đích cá nhân.

Năm 1997-1999, hai lập trình viên Zeev và Andy viết lại core PHP để công nghiệp hoá, core PHP là viết gộp tên của hai ông: Zend Engine 1.0

Năm 2000, PHP ra phiên bản 5, đã hỗ trợ OOP.

PHP 6 ra đời nhưng thất bại. Dev vẫn xài PHP 5.

Năm 2015, PHP 7 ra đời, nâng cấp Engine lên Zend Engine 3.0, hiệu năng so với PHP 5 nhanh gấp 3 lần, bổ sung thêm tính năng cho phép khai báo kiểu dữ liệu trả về của function.

Năm 2020, PHP 8 ra đời, thêm cơ chế JIT (Just In Time) cho phép PHP chạy tiệm cận C về mặt tính toán và bổ sung Fiber mở đường cho async. Với 2 update này, PHP đang rẽ dần sang hướng có thể xử lý những tác vụ nặng tiêu tốn CPU, không còn là 1 PHP cận-lùn-trĩ-đụt như mọi người hay nghĩ.

2. Môi trường chạy

PHP chạy được ở 2 môi trường là HTTP và CLI:

  • HTTP (Web Request Mode): Đây là môi trường phổ biến nhất — nơi PHP xử lý request từ trình duyệt hoặc API.
  • CLI (Command Line Interface): Đây là môi trường dùng để chạy 1 file code trên Terminal (màn hình Console của hệ điều hành).

3. Cú pháp cơ bản

PHP khai báo biến bằng ký hiệu $, PHP không cần khai báo kiểu dữ liệu trước.
ví dụ:

<?php
$age = 18;
echo $age, PHP_EOL; // in ra màn hình terminal là 18 và dấu xuống dòng

Cơ chế compile của PHP giống Java, code php sẽ dịch sang OP Code rồi mới chạy trên Zend VM.
(Java dịch sang Bytecode rồi chạy trên máy ảo JVM). VM là viết tắt của Virtual Machine
Zend VM của PHP xử lý các file code PHP bằng C, sau đó compile ra OP Code.
Zend VM sử dụng một kiểu cấu trúc dữ liệu ở C là ZVal như sau:

typedef union _zvalue_value {
    long lval;
    double dval;
    struct {
        char *val;
        int len;
    } str;
    HashTable *ht;
    zend_object_value obj;
} zvalue_value;

Nhìn vào đoạn code trên, ta có thể thấy mỗi Biến trong php không có type cố định, type chỉ quyết định tại runtine, nên Zend VM lưu cả “giá trị + type” trong mỗi biến.
Type của một zval có thể thay đổi trong suốt vòng đời, ví dụ biến từng chứa integer, sau đó gán string cũng được.
Vì string, array, object… là các cấu trúc phức tạp hơn integer/float, zval dùng union + pointer để linh hoạt lưu trữ, mà vẫn giữ được chung một kiểu dữ liệu.
PHP là ngôn ngữ Thông dịch, nên không cần build trước mới chạy.

By admin