summaryrefslogtreecommitdiff
path: root/UPGRADING
blob: 1a563803e7473090275910ae966db3a3ca1c8dee (plain)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
PHP 8.0 UPGRADE NOTES

1. Backward Incompatible Changes
2. New Features
3. Changes in SAPI modules
4. Deprecated Functionality
5. Changed Functions
6. New Functions
7. New Classes and Interfaces
8. Removed Extensions and SAPIs
9. Other Changes to Extensions
10. New Global Constants
11. Changes to INI File Handling
12. Windows Support
13. Other Changes
14. Performance Improvements


========================================
1. Backward Incompatible Changes
========================================

- Core:
  . Methods with the same name as the class are no longer interpreted as
    constructors. The __construct() method should be used instead.
  . Removed ability to call non-static methods statically.
  . Removed (unset) cast.
  . Removed track_errors ini directive. This means that $php_errormsg is no
    longer available. The error_get_last() function may be used instead.
  . Removed the ability to define case-insensitive constants. The third
    argument to define() may no longer be true.
  . Access to undefined constants now always results in an Error exception.
    Previously, unqualified constant accesses resulted in a warning and were
    interpreted as strings.
  . Removed ability to specify an autoloader using an __autoload() function.
    spl_autoload_register() should be used instead.
  . Removed the $errcontext argument for custom error handlers.
  . Removed create_function(). Anonymous functions may be used instead.
  . Removed each(). foreach or ArrayIterator should be used instead.
  . Removed ability to unbind $this from closures that were created from a
    method, using Closure::fromCallable() or ReflectionMethod::getClosure().
  . Any array that has a number n as its first numeric key will use n+1 for
    its next implicit key. Even if n is negative.
    RFC: https://wiki.php.net/rfc/negative_array_index
  . The @ operator will no longer silence fatal errors (E_ERROR, E_CORE_ERROR,
    E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR, E_PARSE). Error handlers
    that expect error_reporting to be 0 when @ is used, should be adjusted to
    use a mask check instead:

        // Replace
        function my_error_handler($err_no, $err_msg, $filename, $linenum) {
            if (error_reporting() == 0) {
                return; // Silenced
            }
            // ...
        }

        // With
        function my_error_handler($err_no, $err_msg, $filename, $linenum) {
            if (!(error_reporting() & $err_no)) {
                return; // Silenced
            }
            // ...
        }

    Additionally, care should be taken that error messages are not displayed in
    production environments, which can result in information leaks. Please
    ensure that display_errors=Off is used in conjunction with error logging.

- COM:
  . Removed the ability to import case-insensitive constants from type
    libraries. The second argument to com_load_typelib() may no longer be false;
    com.autoregister_casesensitive may no longer be disabled; case-insensitive
    markers in com.typelib_file are ignored.

- Date:
  . mktime() and gmmktime() now require at least one argument. time() can be
    used to get the current timestamp.

- Exif:
  . Removed read_exif_data(). exif_read_data() should be used instead.

- Filter:
  . The FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIRED flags for the
    FILTER_VALIDATE_URL filter have been removed. The scheme and host are (and
    have been) always required.

- GD:
  . The deprecated function image2wbmp() has been removed.
    RFC: https://wiki.php.net/rfc/image2wbmp
  . The deprecated functions png2wbmp() and jpeg2wbmp() have been removed.
    RFC: https://wiki.php.net/rfc/deprecate-png-jpeg-2wbmp
  . The default $mode parameter of imagecropauto() no longer accepts -1.
    IMG_CROP_DEFAULT should be used instead.

- GMP:
  . gmp_random() has been removed. One of gmp_random_range() or
    gmp_random_bits() should be used instead.

- Intl:
  . The deprecated constant INTL_IDNA_VARIANT_2003 has been removed.
    RFC: https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003
  . The deprecated Normalizer::NONE constant has been removed.

- LDAP:
  . The deprecated function ldap_sort has been removed.

- Mbstring:
  . The mbstring.func_overload directive has been removed. The related
    MB_OVERLOAD_MAIL, MB_OVERLOAD_STRING, and MB_OVERLOAD_REGEX constants have
    also been removed. Finally, the "func_overload" and "func_overload_list"
    entries in mb_get_info() have been removed.
  . mb_parse_str() can no longer be used without specifying a result array.
  . A number of deprecated mbregex aliases have been removed. See the following
    list for which functions should be used instead:

     * mbregex_encoding()      -> mb_regex_encoding()
     * mbereg()                -> mb_ereg()
     * mberegi()               -> mb_eregi()
     * mbereg_replace()        -> mb_ereg_replace()
     * mberegi_replace()       -> mb_eregi_replace()
     * mbsplit()               -> mb_split()
     * mbereg_match()          -> mb_ereg_match()
     * mbereg_search()         -> mb_ereg_search()
     * mbereg_search_pos()     -> mb_ereg_search_pos()
     * mbereg_search_regs()    -> mb_ereg_search_regs()
     * mbereg_search_init()    -> mb_ereg_search_init()
     * mbereg_search_getregs() -> mb_ereg_search_getregs()
     * mbereg_search_getpos()  -> mb_ereg_search_getpos()
     * mbereg_search_setpos()  -> mb_ereg_search_setpos()

  . The 'e' modifier for mb_ereg_replace() has been removed.
    mb_ereg_replace_callback() should be used instead.
  . A non-string pattern argument to mb_ereg_replace() will now be interpreted
    as a string instead of an ASCII codepoint. The previous behavior may be
    restored with an explicit call to chr().

- PDO:
  . The method PDOStatement::setFetchMode() now accepts the following signature:

        PDOStatement::setFetchMode($mode, $classname, $params) 

- PDO_ODBC:
  . The php.ini directive pdo_odbc.db2_instance_name has been removed

- Reflection:
  . The method signatures

        ReflectionClass::newInstance($args)
        ReflectionFunction::invoke($args)
        ReflectionMethod::invoke($object, $args)

    have been changed to:

        ReflectionClass::newInstance(...$args)
        ReflectionFunction::invoke(...$args)
        ReflectionMethod::invoke($object, ...$args)

    Code that must be compatible with both PHP 7 and PHP 8 can use the following
    signatures to be compatible with both versions:

        ReflectionClass::newInstance($arg = null, ...$args)
        ReflectionFunction::invoke($arg = null, ...$args)
        ReflectionMethod::invoke($object, $arg = null, ...$args)

- SPL:
  . SplFileObject::fgetss() has been removed.
  . SplHeap::compare($a, $b) now specifies a method signature. Inheriting
    classes implementing this method will now have to use a compatible
    method signature.

- Standard:
  . assert() will no longer evaluate string arguments, instead they will be
    treated like any other argument. assert($a == $b) should be used instead of
    assert('$a == $b'). The assert.quiet_eval ini directive and
    ASSERT_QUIET_EVAL constants have also been removed, as they would no longer
    have any effect.
  . parse_str() can no longer be used without specifying a result array.
  . fgetss() has been removed.
  . The string.strip_tags filter has been removed.
  . The needle argument of strpos(), strrpos(), stripos(), strripos(), strstr(),
    strchr(), strrchr(), and stristr() will now always be interpreted as a
    string. Previously non-string needles were interpreted as an ASCII code
    point. An explicit call to chr() can be used to restore the previous
    behavior.
  . The 'salt' option of password_hash() is no longer supported. If the 'salt'
    option is used a warning is generated, the provided salt is ignored, and a
    generated salt is used instead.
  . The quotemeta() function will now return an empty string if an empty string
    was passed. Previously false was returned.

- Zlib:
  . gzgetss() has been removed.

========================================
2. New Features
========================================

========================================
3. Changes in SAPI modules
========================================

========================================
4. Deprecated Functionality
========================================

========================================
5. Changed Functions
========================================

========================================
6. New Functions
========================================

========================================
7. New Classes and Interfaces
========================================

========================================
8. Removed Extensions and SAPIs
========================================

========================================
9. Other Changes to Extensions
========================================

========================================
10. New Global Constants
========================================

========================================
11. Changes to INI File Handling
========================================

========================================
12. Windows Support
========================================

========================================
13. Other Changes
========================================

========================================
14. Performance Improvements
========================================