Interface de função externa

Introdução

Esta extensão permite o carregamento de bibliotecas compartilhadas (.DLL ou .so), a chamada de funções escritas em C e o acesso à estruturas de dados de C em PHP puro, sem a necessidade de maiores conhecimentos da API de extensões do Zend, e sem a necessidade de aprender uma terceira linguagem "intermediária". A API pública é implementada como uma única classe FFI com diversos métodos estáticos (alguns deles podem ser chamados dinamicamente) e métodos de objetos sobrecarregados, que realizam a interação com os dados em C.

Cuidado

A FFI é perigosa, visto que permite a interface com o sistema em um nível muito baixo. A extensão FFI deve ser usada apenas por desenvolvedores que possuam experiência com C e com as APIs de C utilizadas. Para minimizar o risco, a utilização da API da FFI pode ser restringida com a opção ffi.enable do php.ini.

Nota: A extensão FFI não torna a API de extensão clássica do PHP obsoleta; ela é apenas fornecida para interface ad-hoc com funções e estruturas de dados em C.

Dica

Atualmente, acessar estruturas de dados com a FFI é significativamente mais lento (aproximadamente 2 vezes) do que acessar arrays e objetos nativos de PHP. Portanto, não faz sentido utilizar a extensão FFI para ganhos de desempenho; entretanto, pode fazer sentido utilizá-la para reduzir o consumo de memória.

adicionar nota

Notas de Usuários 1 note

up
5
Nathaniel Sabanski
2 years ago
Quickstart from Rasmus Lerdorf's 25 years of PHP talk. 

<?php
$ffi = FFI::cdef(
    "int printf(const char *format, ...);",
    "libc.so.6");
$ffi->printf("Hello %s!\n", "world");
?>

Requires ffi.enable=1
To Top