Hướng dẫn dùng define tokenize trong PHP
Mở đầuCó rất nhiều điều xảy ra khi chúng ta thực hiện một đoạn mã PHP. Nói chung, trình thông dịch PHP đi qua bốn giai đoạn khi thực hiện 1 đoạn code:
Chúng ta sẽ đi qua các giai đoạn này và thực hiện các ví dụ để thấy kết quả từ mỗi giai đoạn, xem điều gì đang xảy ra. Lưu ý rằng mặc dù một số phần mở rộng đã được sử dụng trong các ví dụ như là một phần của PHP (như tokenizer và OPcache) nhưng những phần khác cần phải được cài đặt và bật theo cách thủ công (như php-ast và VLD) Bước 1 – LexingLexing (hoặc tokenizing) là quá trình biến một chuỗi (trong trường hợp này mã nguồn PHP) thành một chuỗi mã thông báo liên tục (sequence of tokens). Một mã thông báo (token) chỉ đơn giản là một tên nhận dạng được đặt tên cho giá trị mà nó đã khớp. PHP sử dụng
Đầu ra:
Không phải tất cả các phần của mã nguồn được đổi thành các mã thông báo. Thay vào đó, một số biểu tượng được xem là các mã thông báo và thay bằng chính chúng (ví dụ Bước 2 – ParsingBộ phân tích cú pháp cũng được tạo ra, lần này với
Đầu ra
Các nút cây (thường là loại
Bước 3 - CompilationGiai đoạn biên dịch sử dụng đầu ra của AST, nơi mà nó phát ra các mã opcodes bằng cách đệ quy đi qua cây. Giai đoạn này cũng thực hiện một vài tối ưu hóa. Chúng bao gồm giải quyết một số cuộc gọi hàm với các đối số kiểu chữ (ví dụ
Chạy lệnh sau:
Đầu ra:
Các opcodes sắp xếp giống với mã nguồn gốc, đủ để chạy theo với các hoạt động cơ bản. Không có tối ưu hóa nào được áp dụng ở cấp độ opcode trong kịch bản trên - nhưng như chúng ta có thể thấy, giai đoạn
biên soạn đã giải quyết các điều kiện không thay đổi (constant condition) ( OPcache làm nhiều việc hơn chỉ đơn giản là bộ nhớ đệm opcodes (do đó bỏ qua lexing, phân tích cú pháp, và giai đoạn biên dịch). Nó cũng đóng gói với nhiều mức độ tối ưu khác nhau. Bây giờ bật lên mức độ tối ưu hóa 4 lần để xem chúng ta có gì:
Đầu ra
Chúng ta có thể thấy rằng constant condition đã bị bỏ đi, và hai Bước 4 - InterpretationGiai đoạn cuối cùng là việc biên dịch các opcodes. Đây là nơi mà các opcodes được chạy trên máy ảo Zend Engine (ZE). Có rất ít thứ để nói về giai đoạn này. Đầu ra là bất cứ thứ gì thông qua các lệnh như Kết luận
|