forked from php/php-src
-
Notifications
You must be signed in to change notification settings - Fork 0
/
UPGRADING.INTERNALS
114 lines (102 loc) · 5.94 KB
/
UPGRADING.INTERNALS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
PHP 8.1 INTERNALS UPGRADE NOTES
1. Internal API changes
a. Removed Zend APIs
b. Zend Stream API
c. zend_get_opcode_id()
2. Build system changes
a. New compiler flags
3. Module changes
a. ext/hash
b. ext/pdo
c. ext/standard
d. ext/pgsql
e. ext/pcre
========================
1. Internal API changes
========================
a. The following APIs have been removed from the Zend Engine:
- The spl_ce_Aggregate, spl_ce_ArrayAccess, spl_ce_Countable, spl_ce_Iterator, spl_ce_Serializable,
spl_ce_Stringable, spl_ce_Traversable alias class entries have been removed in favor of zend_ce_aggregate,
zend_ce_arrayaccess, zend_ce_countable, zend_ce_iterator, zend_ce_serializable, zend_ce_stringable,
zend_ce_traversable.
- The ZVAL_NEW_ARR() macro has been removed. Use array_init() or ZVAL_ARR
with zend_new_array() instead.
b. Zend Stream API has been changed to use "zend_string*" instead of "char*"
- zend_file_handle.filename now is zend_string*
- zend_file_handle.free_filename is removed. Now zend_file_handle.filename is always released.
- added zend_file_handle.primary_script flag. SAPIs should set it for main executed script.
- added zend_file_handle.in_list flag, which is set when a file_handle is added into CG(open_files)
- added zend_stream_init_filename_ex() function, that takes filename as zend_string*
- the "filename" parameter of functons zend_stream_open(), php_stream_open_for_zend_ex() and
callback zend_stream_open_function() has been removed (it's now passed as a "filename" field of the
file_handle parameter)
- in zend_fopen() and zend_resolve_path() callbacks filename now passed as zend_string*
- file_handles should be destroyed by zend_destroy_file_handle() function (usually in the same function
the same function where they were created by zend_stream_init_*()). Previously there were two different
destructors zend_destroy_file_handle() and zend_file_handle_dtor().
- zend_ini_scanner_globals.filename now is zend_string*
c. Added the zend_get_opcode_id() function, which is intended to get opcode id from name.
d. Removed support for "p" modifier (%pd, %pu, etc) in PHP's printf
implementations. Use ZEND_LONG_FMT and ZEND_ULONG_FMT instead.
========================
2. Build system changes
========================
a. New compiler flags
- [-Wimplicit-fallthrough=1] is now enabled by default.
It is possible to use the new ZEND_FALLTHROUGH macro keyword to suppress the warning.
========================
3. Module changes
========================
a. ext/hash
- The init signatures are extended with an additional `HashTable*`
argument. The passed HT is to contain the algorithm specific
configuration. If an algorithm doesn't make use of any additional
configuration, the argument is to be marked with ZEND_ATTRIBUTE_UNUSED.
b. ext/pdo
- The "preparer" callback now accepts a zend_string* instead of
char* + size_t pair the query string. Similarly, the query_string and
active_query_string members of pdo_stmt_t are now zend_string*.
- The way in which drivers provide results has changed: Previously,
the "describer" callback populated the "pdo_type" member in the
pdo_column_data structure, and the "get_col" callback then had to return
pointers to data of appropriate type.
In PHP 8.1, the "describer" callback no longer determines the pdo_type
(and this member has been removed from pdo_column_data). Instead, the
"get_col" callback accepts a zval pointer that may be populated with a
value of arbitrary type. This gives drivers more flexibility in
determining result types (e.g. based on whether a specific integer fits
the PHP integer type) and avoid awkward juggling of temporary buffers.
As the "describer" no longer determines pdo_type, the "get_column_meta"
function is now responsible for providing this information for use by
getColumnMeta(). The type provided here does not need to match the type
returned by get_col (in fact no corresponding type might exist, e.g. for
floats). It should be the closest logical equivalent for the column type.
- The transaction, set_attribute, and preparer handler's return type
has been formalized to bool instead of int.
- The check_liveness handler's return type has been formalized to zend_return
instead of int.
- The closer, and fetch_error handlers have been voidified.
- The quoter handler now returns the quoted string as zend_string* instead
of returning a boolean, and the quoted string as a pair of out params.
Similarly the unquoted string is now a zend_string* instead of a pair of
char* and size_t length.
- The doer handler now accepts a zend_string* instead of char* + size_t
pair for the SQL statement.
- The last_id handler now returns a zend_string* instead of returning a
char* and the length as an out param, and accepts a zend_string* instead
of char* for the optional sequence/table name.
- The php_pdo_str_tolower_dup() PDO_API has been removed use zend_str_tolower_dup()
or zend_string_tolower_ex().
c. ext/standard
- The PHP API php_fputcsv() now takes an extra zend_string* argument at the end
for a custom EOL sequence, passing NULL provides the old default of "\n".
d. ext/pgsql
- The functions php_pgsql_meta_data(), php_pgsql_convert(), php_pgsql_insert(),
php_pgsql_update(), php_pgsql_delete(), and php_pgsql_select() have had
their return type formalized to zend_result.
- The functions php_pgsql_meta_data(), php_pgsql_convert(), php_pgsql_insert(),
php_pgsql_update(), php_pgsql_delete(), and php_pgsql_select() now accept a
zend_string* instead of a char* for the table name.
e. ext/pcre
- Bundled PCRE2 is at version 10.37. The most important diff to the previous
version is the JIT support on the S390 platform.