summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--UPGRADING5
-rw-r--r--ext/intl/tests/dateformat_format.phpt20
-rw-r--r--ext/intl/tests/dateformat_format_variant3.phpt20
-rw-r--r--ext/standard/tests/array/var_export.phpt4
-rw-r--r--ext/standard/tests/general_functions/var_export-locale.phpt12
-rw-r--r--ext/standard/tests/general_functions/var_export_basic6.phpt12
-rw-r--r--ext/standard/tests/general_functions/var_export_basic8.phpt16
-rw-r--r--ext/standard/tests/general_functions/var_export_basic9.phpt4
-rw-r--r--ext/standard/var.c15
10 files changed, 62 insertions, 47 deletions
diff --git a/NEWS b/NEWS
index 70df174c98..6153423236 100644
--- a/NEWS
+++ b/NEWS
@@ -99,6 +99,7 @@ PHP NEWS
. Fixed bug #76505 (array_merge_recursive() is duplicating sub-array keys).
(Laruence)
. Fixed bug #71848 (getimagesize with $imageinfo returns false). (cmb)
+ . Fixed bug #48016 (stdClass::__setState is not defined although var_export() uses it). (Andrea)
- Tokenizer:
. Fixed bug #76538 (token_get_all with TOKEN_PARSE flag fails to recognise
diff --git a/UPGRADING b/UPGRADING
index 0cad272e31..160a1d3549 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -398,6 +398,11 @@ PCRE:
behavioral changes, and augments the existing regular expression syntax.
See <https://wiki.php.net/rfc/pcre2-migration> for details.
+ Standard:
+ . var_export() now exports stdClass objects as an array casted to an object
+ (`(object) array( ... )`), rather than using the nonexistent method
+ stdClass::__setState().
+
ZIP:
. Bundled libzip has been dropped,
system library is now required.
diff --git a/ext/intl/tests/dateformat_format.phpt b/ext/intl/tests/dateformat_format.phpt
index a0135a809c..cc1682ddd2 100644
--- a/ext/intl/tests/dateformat_format.phpt
+++ b/ext/intl/tests/dateformat_format.phpt
@@ -397,27 +397,27 @@ Date is: DateTime::__set_state(array(
------------
Formatted DateTime is : 20001230 05:04 PM
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
diff --git a/ext/intl/tests/dateformat_format_variant3.phpt b/ext/intl/tests/dateformat_format_variant3.phpt
index da0d662ca7..6827e8132a 100644
--- a/ext/intl/tests/dateformat_format_variant3.phpt
+++ b/ext/intl/tests/dateformat_format_variant3.phpt
@@ -397,27 +397,27 @@ Date is: DateTime::__set_state(array(
------------
Formatted DateTime is : 20001230 05:04 PM
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
------------
-Date is: stdClass::__set_state(array(
-))
+Date is: (object) array(
+)
------------
Error while formatting as: 'datefmt_format: invalid object type for date/time (only IntlCalendar and DateTimeInterface permitted): U_ILLEGAL_ARGUMENT_ERROR'
diff --git a/ext/standard/tests/array/var_export.phpt b/ext/standard/tests/array/var_export.phpt
index 0b1f76094d..5c23ad267c 100644
--- a/ext/standard/tests/array/var_export.phpt
+++ b/ext/standard/tests/array/var_export.phpt
@@ -6,8 +6,8 @@ $a = (object) array (1, 3, "foo" => "bar");
var_export($a);
?>
--EXPECT--
-stdClass::__set_state(array(
+(object) array(
'0' => 1,
'1' => 3,
'foo' => 'bar',
-))
+)
diff --git a/ext/standard/tests/general_functions/var_export-locale.phpt b/ext/standard/tests/general_functions/var_export-locale.phpt
index 11db6fbbb4..e440238970 100644
--- a/ext/standard/tests/general_functions/var_export-locale.phpt
+++ b/ext/standard/tests/general_functions/var_export-locale.phpt
@@ -914,12 +914,12 @@ string(41) "array (
*** Output for objects ***
Iteration 1
-stdClass::__set_state(array(
-))
-stdClass::__set_state(array(
-))
-string(31) "stdClass::__set_state(array(
-))"
+(object) array(
+)
+(object) array(
+)
+string(17) "(object) array(
+)"
Iteration 2
diff --git a/ext/standard/tests/general_functions/var_export_basic6.phpt b/ext/standard/tests/general_functions/var_export_basic6.phpt
index 38fdb373df..bdcdf48c02 100644
--- a/ext/standard/tests/general_functions/var_export_basic6.phpt
+++ b/ext/standard/tests/general_functions/var_export_basic6.phpt
@@ -108,12 +108,12 @@ foreach($valid_objects as $key => $obj) {
*** Output for objects ***
-- Iteration: new stdclass --
-stdClass::__set_state(array(
-))
-stdClass::__set_state(array(
-))
-string(31) "stdClass::__set_state(array(
-))"
+(object) array(
+)
+(object) array(
+)
+string(17) "(object) array(
+)"
-- Iteration: new foo --
diff --git a/ext/standard/tests/general_functions/var_export_basic8.phpt b/ext/standard/tests/general_functions/var_export_basic8.phpt
index f71c095f96..faae2bca17 100644
--- a/ext/standard/tests/general_functions/var_export_basic8.phpt
+++ b/ext/standard/tests/general_functions/var_export_basic8.phpt
@@ -30,17 +30,17 @@ var_export($b);
===DONE===
--EXPECT--
-- Var export on a simple object --
-stdClass::__set_state(array(
+(object) array(
'a' => 1,
'b' =>
array (
'k' => 2,
),
'x' =>
- stdClass::__set_state(array(
+ (object) array(
'p' => '22',
- )),
-))
+ ),
+)
-- Var export on an simple array --
array (
@@ -57,15 +57,15 @@ array (
'one' => 'first',
),
'bar' =>
- stdClass::__set_state(array(
+ (object) array(
'a' => 1,
'b' =>
array (
'k' => 2,
),
'x' =>
- stdClass::__set_state(array(
+ (object) array(
'p' => '22',
- )),
- )),
+ ),
+ ),
)===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_basic9.phpt b/ext/standard/tests/general_functions/var_export_basic9.phpt
index 3c9706edfd..fd78c18c8e 100644
--- a/ext/standard/tests/general_functions/var_export_basic9.phpt
+++ b/ext/standard/tests/general_functions/var_export_basic9.phpt
@@ -6,6 +6,6 @@ Bug #55082: var_export() doesn't escape properties properly
$x->{'\'\\'} = 7;
echo var_export($x);
--EXPECT--
-stdClass::__set_state(array(
+(object) array(
'\'\\' => 7,
-))
+)
diff --git a/ext/standard/var.c b/ext/standard/var.c
index 46d1b2df65..7b1cb5949a 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -527,8 +527,13 @@ again:
buffer_append_spaces(buf, level - 1);
}
- smart_str_append(buf, Z_OBJCE_P(struc)->name);
- smart_str_appendl(buf, "::__set_state(array(\n", 21);
+ /* stdClass has no __set_state method, but can be casted to */
+ if (Z_OBJCE_P(struc) == zend_standard_class_def) {
+ smart_str_appendl(buf, "(object) array(\n", 16);
+ } else {
+ smart_str_append(buf, Z_OBJCE_P(struc)->name);
+ smart_str_appendl(buf, "::__set_state(array(\n", 21);
+ }
if (myht) {
ZEND_HASH_FOREACH_KEY_VAL_IND(myht, index, key, val) {
@@ -539,7 +544,11 @@ again:
if (level > 1) {
buffer_append_spaces(buf, level - 1);
}
- smart_str_appendl(buf, "))", 2);
+ if (Z_OBJCE_P(struc) == zend_standard_class_def) {
+ smart_str_appendc(buf, ')');
+ } else {
+ smart_str_appendl(buf, "))", 2);
+ }
break;
case IS_REFERENCE: