xref: /PHP-7.4/ext/ffi/tests/200.phpt (revision 280485ad)
1--TEST--
2FFI 200: PHP callbacks
3--SKIPIF--
4<?php require_once('skipif.inc'); ?>
5<?php require_once('utils.inc'); ?>
6<?php
7try {
8	FFI::cdef("void* zend_write;", ffi_get_php_dll_name());
9} catch (Throwable $e) {
10	die('skip PHP symbols not available');
11}
12?>
13--INI--
14ffi.enable=1
15--FILE--
16<?php
17require_once('utils.inc');
18$zend = FFI::cdef("
19	typedef int (*zend_write_func_t)(const char *str, size_t str_length);
20	extern zend_write_func_t zend_write;
21", ffi_get_php_dll_name());
22
23echo "Hello World!\n";
24
25$orig_zend_write = clone $zend->zend_write;
26$zend->zend_write = function($str, $len) {
27	global $orig_zend_write;
28	$orig_zend_write("{\n\t", 3);
29	$ret = $orig_zend_write($str, $len);
30	$orig_zend_write("}\n", 2);
31	return $ret;
32};
33echo "Hello World!\n";
34$zend->zend_write = $orig_zend_write;
35
36echo "Hello World!\n";
37?>
38--EXPECT--
39Hello World!
40{
41	Hello World!
42}
43Hello World!
44