Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7b1f563
Fix segfault comparing uninitialized SimpleXMLElement instances
iliaal Aug 5, 2026
2806a36
Merge branch 'PHP-8.4' into PHP-8.5
iliaal Aug 10, 2026
9d58ce5
Merge branch 'PHP-8.5'
iliaal Aug 10, 2026
2f08d44
ext/intl: IntlNumberRangeFormatter::format() crash when the formattin…
devnexen Aug 10, 2026
b6595cc
Update test file path for bug60771 (#22980)
withinboredom Aug 10, 2026
0d26c1c
CI: Select Windows test workers automatically (#22946)
NickSdot Aug 10, 2026
9e1f20a
Merge branch 'PHP-8.2' into PHP-8.3
arnaud-lb Aug 10, 2026
222dc2d
Merge branch 'PHP-8.3' into PHP-8.4
arnaud-lb Aug 10, 2026
a75f28d
Merge branch 'PHP-8.4' into PHP-8.5
arnaud-lb Aug 10, 2026
eac880a
Merge branch 'PHP-8.5'
arnaud-lb Aug 10, 2026
c2816be
Zend: Name map ptr chunk size constants (#23109)
LamentXU123 Aug 10, 2026
a9ba369
Zend: deprecate naming a function readonly
Girgias Aug 5, 2026
7e0d5c7
standard: deprecate passing an object to array_walk{_recursive}()
Girgias Aug 5, 2026
f8c854e
zlib: deprecate passing objects as array
Girgias Aug 5, 2026
3fda4e9
bz2: deprecate passing objects as array
Girgias Aug 5, 2026
7cc1432
mbstring: deprecate passing objects as vars to mb_convert_variables()
Girgias Aug 5, 2026
0b14af3
standard: deprecate aliases with non canonical type name
Girgias Aug 5, 2026
22217b3
standard: deprecate strcoll and SORT_LOCALE_STRING
Girgias Aug 5, 2026
75abe1c
Zend: move builtin function tests into subfolder
Girgias Aug 6, 2026
acd342d
Zend: deprecate passing a 3rd argument to define()
Girgias Aug 6, 2026
2c1c61d
spl: deprecate spl_object_hash()
Girgias Aug 9, 2026
6214a21
spl: deprecate spl_classes()
Girgias Aug 9, 2026
e95647c
spl: deprecate ArrayIterator methods that make little sense
Girgias Aug 9, 2026
bad89ea
Zend: remove zend_parse_parameter() (#23051)
Girgias Aug 10, 2026
34f5a72
Amend UPGRADING for recent deprecations and engine API changes
Girgias Aug 10, 2026
1cf82be
zlib: Add test with invalid levels
Girgias Jul 15, 2026
148afdb
zlib: use new stream error API
Girgias Jul 15, 2026
4b26ff1
RFC: Deprecate metaphone() (#21889)
LamentXU123 Aug 10, 2026
11047a7
Fix use-after-free when __clone() retains the stylesheet copy
iliaal Aug 10, 2026
46b4095
Merge branch 'PHP-8.4' into PHP-8.5
iliaal Aug 10, 2026
c8682fb
Merge branch 'PHP-8.5'
iliaal Aug 10, 2026
a49acfa
standard: deprecate passing objects to http_build_query() (#23202)
Girgias Aug 10, 2026
c383b8c
core: Deprecate using `namespace` as class constant name (#22964)
NickSdot Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/matrix.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re
foreach ($branches as &$branch) {
$php_version = $branch['version'][0] . '.' . $branch['version'][1];
$branch['jobs'] = select_jobs($repository, $trigger, $nightly, $labels, $php_version, $branch['ref'], $all_variations);
$branch['config']['default_run_test_jobs'] = version_compare($php_version, '8.6', '>=') ? '' : '-j2';
$branch['config']['ubuntu_version'] = version_compare($php_version, '8.5', '>=') ? '24.04' : '22.04';
}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,7 @@ jobs:
PLATFORM: ${{ matrix.x64 && 'x64' || 'x86' }}
THREAD_SAFE: "${{ matrix.zts && '1' || '0' }}"
INTRINSICS: "${{ matrix.zts && 'AVX2' || '' }}"
PARALLEL: -j2
PARALLEL: ${{ matrix.asan && '-j2' || fromJson(inputs.branch).config.default_run_test_jobs }}
OPCACHE: "${{ matrix.opcache && '1' || '0' }}"
ASAN: "${{ matrix.asan && '1' || '0' }}"
CLANG_TOOLSET: "${{ matrix.clang && '1' || '0' }}"
Expand Down
10 changes: 10 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ PHP NEWS
operation depth. (iliaal)

- Core:
. Deprecated "namespace" as a class constant name. (NickSdot)
. Changed run-tests.php to run in parallel by default, using up to 10
automatically detected workers. Pass -j1 for sequential execution.
(NickSdot)
Expand Down Expand Up @@ -56,6 +57,8 @@ PHP NEWS
. Added SpoofChecker::areBidiConfusable(). (David Carlier)
. Added SpoofChecker::getBidiSkeleton(). (Weilin Du)
. Added SpoofChecker::getSkeleton(). (David Carlier)
. Fixed IntlNumberRangeFormatter::format() crash when the formatting fails.
(David Carlier)

- PDO:
. Fixed pdo_raise_impl_error() emitting a warning under ERRMODE_SILENT.
Expand Down Expand Up @@ -85,11 +88,14 @@ PHP NEWS
element. (iliaal)
. SimpleXMLElement::__construct() now raises a ValueError when the $data
argument contains NUL bytes. (iliaal)
. Fixed segfault when comparing uninitialized SimpleXMLElement
instances. (iliaal)

- Standard:
. Added the "filter.max_filter_count" stream context option for php://filter
URLs. Using more than 16 filters without configuring this option is now
deprecated. (Sjoerd Langkemper)
. metaphone() is now deprecated. (Weilin Du)
. Improved performance of array_intersect(). (mehmetcansahin)
. Fixed bug GH-23006 (phpcredits() full-page HTML title says phpinfo()).
(Weilin Du)
Expand All @@ -103,6 +109,10 @@ PHP NEWS
. Io\Poll\Context::wait() now takes a Time\Duration object as a timeout.
(timwolla)

- XSL:
. Fixed use-after-free when a DOMDocument subclass __clone() retains the
stylesheet copy made by XSLTProcessor::importStylesheet(). (iliaal)

30 Jul 2026, PHP 8.6.0alpha3

- Core:
Expand Down
63 changes: 63 additions & 0 deletions UPGRADING
Original file line number Diff line number Diff line change
Expand Up @@ -441,12 +441,22 @@ PHP 8.6 UPGRADE NOTES
========================================

- Core:
. Using "namespace" as a class constant name is deprecated.
. Specifying a return type of array|null / ?array for __debugInfo() is now
deprecated. Specify array instead.
. Returning values from __construct() and __destruct() is now deprecated.
RFC: https://wiki.php.net/rfc/deprecate-return-value-from-construct
. Making __construct() and __destruct() a Generator is now deprecated.
RFC: https://wiki.php.net/rfc/deprecate-return-value-from-construct
. Naming a function readonly is now deprecated.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_the_possibility_to_name_a_function_readonly
. Passing a 3rd argument to define() is now deprecated.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_define_with_case_insensitive_being_specified

- BZ2
. Passing an object for the Bzip2 {de}compression stream filter is now
deprecated. Use get_object_vars() on the object instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#passing_objects_as_parameters_to_the_bzip2decompress_and_bzip2compress_stream_filters

- GMP
. The shift (<<, >>) and exponentiation (**) operators on GMP objects now
Expand All @@ -457,12 +467,65 @@ PHP 8.6 UPGRADE NOTES
. Mbregex has been deprecated, because the underlying Oniguruma library
is no longer maintained.
RFC: https://wiki.php.net/rfc/eol-oniguruma
. Passing objects to mb_convert_variables() is now deprecated
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#passing_objects_for_vars_parameter_of_mb_convert_variables

- SPL:
. The spl_classes() function is now deprecated, use
ReflectionExtension::getClassNames() instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_spl_classes
. The spl_object_hash() function is now deprecated, use spl_object_id()
instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_spl_object_hash
. The following ArrayIterator methods are now deprecated:
* ArrayIterator::getFlags()
* ArrayIterator::setFlags()
* ArrayIterator::asort()
* ArrayIterator::ksort()
* ArrayIterator::uasort()
* ArrayIterator::uksort()
* ArrayIterator::natsort()
* ArrayIterator::natcasesort()
* ArrayIterator::unserialize()
* ArrayIterator::serialize()
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_arrayiterator_methods_that_inherit_arrayobject_implementation

- Standard:
. metaphone() is deprecated.
Please use a userland phonetic matching library instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_metaphone_function
. Using more than 16 filters in a php://filter URL without configuring the
"filter.max_filter_count" stream context option now emits an E_DEPRECATED
warning. Use stream_filter_append() or configure this option explicitly.
RFC: https://wiki.php.net/rfc/limit-maximum-number-of-filter-chains
. Passing an object to array_walk{_recursive} is now deprecated. Use
get_object_vars() on the object instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#passing_objects_for_array_parameter_of_array_walk_and_array_walk_recursive
. The is_double() function is now deprecated, use is_float() instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_is_double
. The is_long() and is_integer() functions are now deprecated, use is_int()
instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_is_integer
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_is_long
. The doubleval() function is now deprecated, use floatval() instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_doubleval
. The strcoll() function is now deprecated, use Collator::compare() instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_strcoll
. The SORT_LOCALE_STRING constant for the family of sort functions is now
deprecated, use one of the following functions instead:
* Collator::sort()
* Collator::asort()
* Collator::sort()
* Collator::sortWithSortKeys()
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_sort_locale_string_flag_for_sort_functions

- Zlib
. Passing an object for the zlib deflate and inflate stream filter is now
deprecated. Use get_object_vars() on the object instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#passing_objects_as_parameters_to_the_zlibinflate_and_zlibdeflate_stream_filters
. Passing an object to the $option argument to deflate_init and inflate_init
is now deprecated. Use get_object_vars() on the object instead.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6#passing_objects_for_options_parameter_of_deflate_init_and_inflate_init

========================================
5. Changed Functions
Expand Down
2 changes: 2 additions & 0 deletions UPGRADING.INTERNALS
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ PHP 8.6 INTERNALS UPGRADE NOTES
. The PHP stream function _php_stream_flush() was removed,
instead the PHP macro php_stream_flush() is now a proper function.
. The zend_save_error_handling() function was removed.
. The zend_parse_parameter() function has been removed, use one fo the
zend_parse_arg_TYPE() APIs instead.

- Changed:
. Internal functions that return by reference are now expected to
Expand Down
4 changes: 2 additions & 2 deletions Zend/tests/bug60598.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ class ObjectOne {
public function __construct() {
global $containers;
$this->guid = 1;
$containers[spl_object_hash($this)] = $this;
$containers[spl_object_id($this)] = $this;
}
public function __destruct() {
global $containers;
$containers[spl_object_hash($this)] = NULL;
$containers[spl_object_id($this)] = NULL;
}
}

Expand Down
6 changes: 3 additions & 3 deletions Zend/tests/bug60771.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
test of larger than 8kb text file being parsed by require statement
--FILE--
<?php
file_put_contents('test.php',str_repeat('passed, ',1024));
require('./test.php');
unlink('test.php');
file_put_contents(__DIR__ . '/gh60771-test.php',str_repeat('passed, ',1024));
require(__DIR__ . '/gh60771-test.php');
unlink(__DIR__ . '/gh60771-test.php');
?>
--EXPECT--
passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed,
25 changes: 25 additions & 0 deletions Zend/tests/builtin_functions/define_arg_3.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
--TEST--
define() with 3rd argument
--FILE--
<?php

define('my_Constant', 5, true);

try {
var_dump(MY_CONSTANT);
} catch (Throwable $e) {
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
}

define('MY_CONSTANT', 5, false);
var_dump(MY_CONSTANT);

?>
--EXPECTF--
Deprecated: define(): Argument #3 ($case_insensitive) is ignored and treated as false since declaration of case-insensitive constants is no longer supported, passing the argument explicitly is unnecessary in %s on line %d

Warning: define(): Argument #3 ($case_insensitive) is ignored since declaration of case-insensitive constants is no longer supported, this will be an error in PHP 9.0 in %s on line %d
Error: Undefined constant "MY_CONSTANT"

Deprecated: define(): Argument #3 ($case_insensitive) is ignored and treated as false since declaration of case-insensitive constants is no longer supported, passing the argument explicitly is unnecessary in %s on line %d
int(5)
67 changes: 67 additions & 0 deletions Zend/tests/deprecate_namespace_class_constant.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
--TEST--
Using "namespace" as a class constant name is deprecated
--FILE--
<?php

define('namespace', 'global constant value');

class Foo {
const NAMESPACE = 'class constant value';
}

interface Bar {
const Namespace = 'interface constant value';
}

enum Baz {
const nAmEsPaCe = 'enum constant value';
}

trait YooTrait {
const namespace = 'trait constant value';
}

class Sup {
use YooTrait;
}

enum Yoo: string {
case namespace = 'enum case value';
}

class Can {
public static $namespace = 'property value';

public static function namespace() {
return 'method value';
}
}

echo Foo::NAMESPACE, PHP_EOL;
echo Bar::Namespace, PHP_EOL;
echo Baz::nAmEsPaCe, PHP_EOL;
echo Yoo::namespace->value, PHP_EOL;
echo Sup::namespace, PHP_EOL;
echo Can::$namespace, PHP_EOL;
echo Can::namespace(), PHP_EOL;
echo constant('namespace'), PHP_EOL;

?>
--EXPECTF--
Deprecated: Declaring class constant called 'namespace' is deprecated in %s on line %d

Deprecated: Declaring interface constant called 'namespace' is deprecated in %s on line %d

Deprecated: Declaring enum constant called 'namespace' is deprecated in %s on line %d

Deprecated: Declaring trait constant called 'namespace' is deprecated in %s on line %d

Deprecated: Declaring enum constant called 'namespace' is deprecated in %s on line %d
class constant value
interface constant value
enum constant value
enum case value
trait constant value
property value
method value
global constant value
1 change: 1 addition & 0 deletions Zend/tests/exceptions/gh16188.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ printf("__toString:\n%s\n\n", $re);
?>
==DONE==
--EXPECTF--
Deprecated: array_walk(): Passing an object for argument #1 $array to array_walk() is deprecated, call get_object_vars() first instead in %s on line %d
getTraceAsString:
#0 {main}

Expand Down
12 changes: 12 additions & 0 deletions Zend/tests/functions/readonly_as_fn_name_is_deprecated.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
--TEST--
Naming a function readonly is deprecated
--FILE--
<?php

function readonly() {}

?>
DONE
--EXPECTF--
Deprecated: Calling a function “readonly” is deprecated in %s on line %d
DONE
Loading