Tiện ích mở rộng PHP và PHP được xây dựng trên cùng của Công cụ Zend. Chúng cho thấy chức năng của Zend Engine đối với người dùng (PHP script) và thêm các tính năng của riêng chúng, hoặc được tiếp xúc với người dùng hoặc các phần mở rộng PHP khác.
Công cụ Zend cung cấp mô hình đối tượng với cách truy cập thứ nguyên đối tượng (chức năng được hiển thị bởi ArrayAccess
) và cơ chế lặp chung được sử dụng để lặp qua đối tượng (idem cho Iterator
). Mô hình đối tượng này bao gồm một số trình xử lý mà PHP và bất kỳ phần mở rộng nào có thể thay thế cho một loại đối tượng (các zend object handlers). Trong mô hình đối tượng của nó, công cụ Zend triển khai một kiểu đối tượng tiêu chuẩn ("các đối tượng zend"); mỗi đối tượng đã theo cấu trúc dữ liệu zend_object
và mỗi lớp - đó là khái niệm giao diện đối tượng cấp thấp không biết ngoài việc cung cấp cách lấy nó - theo cấu trúc zend_class_entry
).
ArrayAccess
thực sự không phải là giao diện SPL; nó được định nghĩa trong chính Zend Engine. Các trình xử lý cấp thấp của các đối tượng zend được thực hiện theo cách mà họ kiểm tra xem đối tượng có thực hiện giao diện đó hay không và gọi các phương thức tương ứng nếu trường hợp đó xảy ra (xem here).
Iterator
cũng không phải là giao diện SPL; nó cũng được định nghĩa trong Zend Engine. Trong trường hợp này, hỗ trợ cho giao diện này được thực hiện ở mức cao hơn một chút. Trình xử lý đối tượng cấp thấp không biết gì về lặp lại đối tượng; đây là tài sản của Zend Objects. Cấu trúc zend_class_entry
có hai thành viên có liên quan ở đây: trường iterator_funcs
và trường get_iterator
. Chúng xác định các phép toán và trạng thái của trình vòng lặp và cách tạo một trình lặp mới. Đối với Iterator
đặc biệt, khi một lớp được đăng ký với thời gian chạy, nó được kiểm tra xem nó có thực hiện giao diện đó hay không, và nếu có, các trường có liên quan trong biến số zend_class_entry
cho lớp đó được đặt thành các phương thức gốc để nối giao diện lặp nguyên bản với PHP phương pháp. Nếu một người viết một phần mở rộng PHP, người ta có thể lựa chọn bằng cách viết một trình lặp bản địa (thực hiện các phương thức lặp nguyên bản) hoặc, giống như trong vùng người dùng, thực hiện Iterator
và viết các phương thức PHP (trong trường hợp này là các phương thức PHP nguyên gốc) cho một số thao tác, như giao diện mô tả.
Giao diện Countable
là giao diện duy nhất thực sự là giao diện SPL; Zend Engine không biết gì về nó. Chức năng của nó bắt nguồn từ thực tế là việc thực hiện kiểm tra count
function cho sự hiện diện của nó và gọi phương thức count
nếu giao diện tồn tại.
Tiện ích mở rộng của nhà khai thác hoạt động ở cài đặt cấp thấp hơn.Khi chạy, ghi trực tiếp vào bộ nhớ của Công cụ Zend và thay thế các trình xử lý mã PHP mã opcodes thành (để bây giờ, ví dụ: ZEND_ASSIGN_ADD
có triển khai thực hiện mới, điều này sẽ ngăn chặn một số hàm/phương thức PHP mà người dùng có thể chọn) .
Điều này không trả lời câu hỏi của bạn. Nhưng vì bạn đang hỏi về internals, bạn sẽ kết thúc ở đây: http://svn.php.net/repository/php/php-src/branches/PHP_5_3/Zend/ - vì vậy bạn cũng có thể có một cái nhìn vào zend_interfaces. c và ../ext/spl/ ngay bây giờ. – mario