PHP 8.4.1 Released!

Callback-функции PHP

Можно присвоить замыкание PHP переменной с типом «указатель» (pointer) или передать замыкание как аргумент функции:

Пример #1 Присваивание Closure языка PHP указателю функции языка C

<?php

$zend
= FFI::cdef("
typedef int (*zend_write_func_t)(const char *str, size_t str_length);
extern zend_write_func_t zend_write;
"
);

echo
"Привет, мир 1!\n";

$orig_zend_write = clone $zend->zend_write;

$zend->zend_write = function($str, $len) {
global
$orig_zend_write;
$orig_zend_write("{\n\t", 3);
$ret = $orig_zend_write($str, $len);
$orig_zend_write("}\n", 2);
return
$ret;
};

echo
"Привет, мир 2!\n";
$zend->zend_write = $orig_zend_write;
echo
"Привет, мир 3!\n";

?>

Результат выполнения приведённого примера:

Привет, мир 1!
{
        Привет, мир 2!
}
Привет, мир 3!
Хоть это и работает, но эта функциональность поддерживается не на каждой платформе с библиотекой libffi, не эффективна и вызывает утечку ресурсов при завершении запросов.
Подсказка

Поэтому рекомендуют минимизировать использование callback-функций PHP.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top