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=1Cette extension permet de charger des bibliothĂšques partagĂ©es (.DLL ou .so), l'appel Ă des fonctions C et l'accĂšs Ă des structures de donnĂ©es C Ă partir de PHP, sans avoir Ă connaĂźtre l'API d'extension Zend, et sans avoir Ă apprendre un troisiĂšme langage "intermĂ©diaire". L'API publique est implĂ©mentĂ©e sous la forme d'une classe unique FFI avec plusieurs mĂ©thodes statiques (certaines d'entre elles peuvent ĂȘtre appelĂ©es dynamiquement), et des mĂ©thodes d'objet surchargĂ©es, qui effectuent l'interaction rĂ©elle avec les donnĂ©es C.
L'extension FFI est dangereuse, car elle permet de s'interfacer avec le systĂšme Ă un niveau trĂšs bas. Elle ne doit ĂȘtre utilisĂ©e que par des dĂ©veloppeurs ayant une connaissance pratique du langage C et des API C utilisĂ©es. Pour minimiser les risques, l'utilisation de l'API FFI peut ĂȘtre restreinte avec la directive php.ini ffi.enable.
Note: L'extension FFI ne rend pas obsolÚte l'API d'extension classique de PHP; elle est simplement fournie pour l'interfaçage ad-hoc avec des fonctions et des structures de données C.
Actuellement, l'accĂšs aux structures de donnĂ©es FFI est significativement (environ 2 fois) plus lent que l'accĂšs aux tableaux et objets natifs de PHP. Par consĂ©quent, il n'est pas utile d'utiliser l'extension FFI pour la vitesse; cependant, il peut ĂȘtre judicieux de l'utiliser pour rĂ©duire la mĂ©moire.
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