2014-09-11 13 views
6

Tôi có một số mã trong C, một số truy cập phần cứng. Mã này đã sẵn sàng và được kiểm tra tốt. Bây giờ tôi muốn thực hiện một giao diện web để kiểm soát phần cứng này. Vì vậy, tôi đã cùng phát triển phần mở rộng PHP với Zephir.Có thể với Zephir để bao gồm một thư viện bên ngoài?

Câu hỏi của tôi là, 'Có thể với Zephir để bao gồm một thư viện bên ngoài resp. liên kết với nó? "và nếu có thể, làm thế nào tôi có thể làm điều đó?

Trả lời

7

Có, có thể và có hai phương pháp để làm việc với mã C.

By gói C-mã trong CBLOCKs

Bạn có thể nhúng c-mã trong thẻ, như vậy: %{ // c-code }%.

Tính năng này không có giấy tờ nhưng tồn tại trong các thử nghiệm.

https://github.com/phalcon/zephir/blob/master/test/cblock.zep https://github.com/phalcon/zephir/blob/c47ebdb71b18f7d8b182f4da4a9c77f734ee9a71/test/cblock.zep#L16 https://github.com/phalcon/zephir/blob/c47ebdb71b18f7d8b182f4da4a9c77f734ee9a71/ext/test/cblock.c

%{ 
    // include a header 
    #include "headers/functions.h" 

    // c implementation of fibonacci 
    static long fibonacci(long n) { 
     if (n < 2) return n; 
     else return fibonacci(n - 2) + fibonacci(n - 1); 
    } 

}% 

Trông một chút xấu xí, nhưng hoạt động,) Một chút thanh lịch hơn, nhưng công việc cũng nhiều hơn, là tối ưu tùy chỉnh:

Bằng cách viết tối ưu hóa tùy chỉnh

Trình tối ưu hóa 'hoạt động như một interceptor cho các cuộc gọi hàm. An ‘trình tối ưu hóa’ thay thế cuộc gọi cho hàm trong miền người dùng PHP bằng cách gọi số trực tiếpcuộc gọi C nhanh hơn và có hiệu suất thấp hơn cải thiện hiệu suất .

Có thể viết trình tối ưu hóa bằng giao diện sạch, cho phép Zephir biết loại tham số được chuyển tiếp tới hàm C và kiểu dữ liệu được trả về.

Manual: https://docs.zephir-lang.com/en/latest/optimizers.html

Ví dụ (gọi để Fibonacci c-func): https://github.com/phalcon/zephir/pull/21#issuecomment-26178522

+0

Bạn có phải là anh chàng ZEPHIR? Bạn có sử dụng nó cho các dự án của bạn? – Pacerier

+1

Thêm một anh chàng PHP đồng bộ theo xu hướng trong cộng đồng. Đặc biệt là các phần mở rộng theo định hướng hiệu suất như Phalcon và YAF đã thu hút sự chú ý của tôi. Tôi đã thêm Phalcon làm tiện ích mở rộng mặc định vào ngăn xếp của mình. –

Các vấn đề liên quan