mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Revert "Fetch for read in nested property assignments"
This reverts commit bb43a3822e
.
After thinking about this a bit more, this is now going to be
a complete solution for the "readonly properties" case, for example:
unset($foo->readOnly->bar);
should also be legal and
$foo->readOnly['bar'] = 42;
should also be legal if $foo->readOnly is not an array but an
ArrayAccess object.
I think it may be better to distinguish better on the BP_VAR flag
level. Reverting for now.
This commit is contained in:
parent
a5f136b855
commit
df79277de3
15 changed files with 3176 additions and 3192 deletions
17
UPGRADING
17
UPGRADING
|
@ -44,8 +44,8 @@ PHP 8.0 UPGRADE NOTES
|
|||
. Removed ability to use array_key_exists() with objects. Use one of isset()
|
||||
or property_exists() instead.
|
||||
. Made the behavior of array_key_exists() regarding the type of the key
|
||||
parameter consistent with isset() and normal array access. All key types
|
||||
now use the usual coercions and array/object keys throw a TypeError.
|
||||
parameter consistent with isset() and normal array access. All key types now use
|
||||
the usual coercions and array/object keys throw a TypeError.
|
||||
. 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
|
||||
|
@ -305,19 +305,6 @@ PHP 8.0 UPGRADE NOTES
|
|||
of the return value is not stable and may change between PHP versions.
|
||||
. Reflection export() methods have been removed.
|
||||
|
||||
- SimpleXML:
|
||||
. It is no longer possible to perform deep initialization of SimpleXMLElement
|
||||
objects:
|
||||
|
||||
$x = simplexml_load_string("<root></root>");
|
||||
$x->a->b->c = 'Test';
|
||||
// Error: Attempt to assign property 'c' of non-object
|
||||
|
||||
The addChild() and addAttribute() APIs should be used instead. It is still
|
||||
possible to modify already existing nodes by direct property assignment,
|
||||
only the creation of multiple levels of nodes in one assignment is no longer
|
||||
supported.
|
||||
|
||||
- Socket:
|
||||
. The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES
|
||||
flags for socket_addrinfo_lookup() have been removed.
|
||||
|
|
|
@ -15,6 +15,14 @@ try {
|
|||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
|
||||
$arr[][] = 2;
|
||||
|
||||
try {
|
||||
$arr[][]->bar = 2;
|
||||
} catch (Error $e) {
|
||||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Undefined variable: arr in %s on line %d
|
||||
|
@ -54,16 +62,5 @@ Warning: Trying to access array offset on value of type null in %s on line %d
|
|||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'foo' of non-object in %s on line %d
|
||||
|
||||
Warning: Undefined variable: arr in %s on line %d
|
||||
|
||||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
|
||||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
|
||||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
|
||||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
|
||||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
Attempt to assign property 'foo' of non-object
|
||||
Attempt to assign property 'bar' of non-object
|
||||
|
|
|
@ -9,7 +9,7 @@ $foo[0]->bar = "xyz";
|
|||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught Error: Attempt to assign property 'bar' of non-object in %s:%d
|
||||
Fatal error: Uncaught Error: Cannot use string offset as an object in %s:%d
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in %s on line %d
|
||||
|
|
|
@ -8,9 +8,7 @@ $foo[3]->bar[1] = "bang";
|
|||
echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Uninitialized string offset: 3 in %s on line %d
|
||||
|
||||
Fatal error: Uncaught Error: Attempt to modify property 'bar' of non-object in %s:%d
|
||||
Fatal error: Uncaught Error: Cannot use string offset as an object in %sbug41919.php:%d
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in %sbug41919.php on line %d
|
||||
|
|
|
@ -6,7 +6,7 @@ $s = "abd";
|
|||
$s[0]->a += 1;
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught Error: Attempt to assign property 'a' of non-object in %s:%d
|
||||
Fatal error: Uncaught Error: Cannot use string offset as an object in %sbug47704.php:%d
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in %sbug47704.php on line %d
|
||||
|
|
|
@ -51,25 +51,19 @@ Warning: Undefined variable: x in %s on line %d
|
|||
Attempt to assign property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: x in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
Attempt to assign property 'b' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: x in %s on line %d
|
||||
Attempt to increment/decrement property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: x in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
Attempt to increment/decrement property 'b' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: x in %s on line %d
|
||||
Attempt to assign property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: x in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
Attempt to assign property 'b' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: x in %s on line %d
|
||||
|
||||
|
|
|
@ -53,29 +53,15 @@ Attempt to modify property 'a' of non-object
|
|||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
Attempt to assign property 'b' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
|
||||
Warning: Trying to access array offset on value of type null in %s on line %d
|
||||
Attempt to assign property 'b' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
Attempt to modify property 'b' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: null in %s on line %d
|
||||
NULL
|
||||
|
|
|
@ -34,6 +34,4 @@ Warning: Undefined variable: u3 in %s on line %d
|
|||
Attempt to increment/decrement property 'a' of non-object
|
||||
|
||||
Warning: Undefined variable: u4 in %s on line %d
|
||||
|
||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
||||
Attempt to assign property 'a' of non-object
|
||||
Attempt to modify property 'a' of non-object
|
||||
|
|
|
@ -2703,13 +2703,7 @@ static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t
|
|||
}
|
||||
CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS;
|
||||
} else {
|
||||
/* In $a->b->c = $d, fetch $a->b for read and only ->c for write.
|
||||
* We will never modify $a->b itself, only the object it holds. */
|
||||
if (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_FUNC_ARG) {
|
||||
opline = zend_delayed_compile_var(&obj_node, obj_ast, BP_VAR_R, 0);
|
||||
} else {
|
||||
opline = zend_delayed_compile_var(&obj_node, obj_ast, type, 0);
|
||||
}
|
||||
opline = zend_delayed_compile_var(&obj_node, obj_ast, type, 0);
|
||||
zend_separate_if_call_and_write(&obj_node, obj_ast, type);
|
||||
}
|
||||
zend_compile_expr(&prop_node, prop_ast);
|
||||
|
|
|
@ -989,7 +989,7 @@ ZEND_VM_COLD_HELPER(zend_undefined_function_helper, ANY, ANY)
|
|||
HANDLE_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
|
||||
ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *object;
|
||||
|
@ -1002,7 +1002,7 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV,
|
|||
zend_string *name, *tmp_name;
|
||||
|
||||
SAVE_OPLINE();
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
|
||||
do {
|
||||
|
@ -1080,7 +1080,7 @@ ZEND_VM_C_LABEL(assign_op_object):
|
|||
|
||||
FREE_OP_DATA();
|
||||
FREE_OP2();
|
||||
FREE_OP1();
|
||||
FREE_OP1_VAR_PTR();
|
||||
/* assign_obj has two opcodes! */
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
@ -1248,7 +1248,7 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
|
||||
ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *object;
|
||||
|
@ -1260,7 +1260,7 @@ ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, C
|
|||
zend_string *name, *tmp_name;
|
||||
|
||||
SAVE_OPLINE();
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
|
||||
do {
|
||||
|
@ -1312,7 +1312,7 @@ ZEND_VM_C_LABEL(pre_incdec_object):
|
|||
} while (0);
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1();
|
||||
FREE_OP1_VAR_PTR();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
|
@ -1333,7 +1333,7 @@ ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
|
|||
zend_string *name, *tmp_name;
|
||||
|
||||
SAVE_OPLINE();
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
|
||||
do {
|
||||
|
@ -1384,7 +1384,7 @@ ZEND_VM_C_LABEL(post_incdec_object):
|
|||
} while (0);
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1();
|
||||
FREE_OP1_VAR_PTR();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
|
@ -2113,14 +2113,14 @@ ZEND_VM_C_LABEL(fetch_obj_r_finish):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|DIM_WRITE|CACHE_SLOT)
|
||||
ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|DIM_WRITE|CACHE_SLOT)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *property, *container, *result;
|
||||
|
||||
SAVE_OPLINE();
|
||||
|
||||
container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
result = EX_VAR(opline->result.var);
|
||||
zend_fetch_property_address(
|
||||
|
@ -2128,24 +2128,24 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FE
|
|||
((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
|
||||
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
FREE_OP2();
|
||||
if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
|
||||
if (OP1_TYPE == IS_VAR) {
|
||||
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
|
||||
ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *property, *container, *result;
|
||||
|
||||
SAVE_OPLINE();
|
||||
container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
result = EX_VAR(opline->result.var);
|
||||
zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
FREE_OP2();
|
||||
if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
|
||||
if (OP1_TYPE == IS_VAR) {
|
||||
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
|
@ -2262,7 +2262,7 @@ ZEND_VM_C_LABEL(fetch_obj_is_finish):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|CACHE_SLOT)
|
||||
ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|CACHE_SLOT)
|
||||
{
|
||||
#if !ZEND_VM_SPEC
|
||||
USE_OPLINE
|
||||
|
@ -2270,7 +2270,7 @@ ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMPVAR|UNUSED|THIS
|
|||
|
||||
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
|
||||
/* Behave like FETCH_OBJ_W */
|
||||
if (OP1_TYPE == IS_CONST) {
|
||||
if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
|
||||
ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
|
||||
}
|
||||
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_W);
|
||||
|
@ -2331,7 +2331,7 @@ ZEND_VM_HANDLER(155, ZEND_FETCH_LIST_W, VAR, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV))
|
||||
ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV))
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *object, *property, *value, tmp;
|
||||
|
@ -2339,7 +2339,7 @@ ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
|
|||
zend_string *name, *tmp_name;
|
||||
|
||||
SAVE_OPLINE();
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);
|
||||
|
||||
|
@ -2470,7 +2470,7 @@ ZEND_VM_C_LABEL(free_and_exit_assign_obj):
|
|||
FREE_OP_DATA();
|
||||
ZEND_VM_C_LABEL(exit_assign_obj):
|
||||
FREE_OP2();
|
||||
FREE_OP1();
|
||||
FREE_OP1_VAR_PTR();
|
||||
/* assign_obj has two opcodes! */
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
@ -2676,14 +2676,14 @@ ZEND_VM_HANDLER(30, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT|SRC, SPEC(OP_DATA=VAR|CV))
|
||||
ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT|SRC, SPEC(OP_DATA=VAR|CV))
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *property, *container, *value_ptr;
|
||||
|
||||
SAVE_OPLINE();
|
||||
|
||||
container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
|
||||
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||
|
||||
value_ptr = GET_OP_DATA_ZVAL_PTR_PTR(BP_VAR_W);
|
||||
|
@ -2706,7 +2706,7 @@ ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV,
|
|||
zend_assign_to_property_reference(container, OP1_TYPE, property, OP2_TYPE, value_ptr OPLINE_CC EXECUTE_DATA_CC);
|
||||
}
|
||||
|
||||
FREE_OP1();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP2();
|
||||
FREE_OP_DATA_VAR_PTR();
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -436,38 +436,22 @@
|
|||
_(857, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) \
|
||||
_(858, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) \
|
||||
_(860, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) \
|
||||
_(886, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST) \
|
||||
_(887, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP) \
|
||||
_(888, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
|
||||
_(890, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV) \
|
||||
_(891, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
|
||||
_(892, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
|
||||
_(893, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(895, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(896, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
|
||||
_(897, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
|
||||
_(898, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(900, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(906, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST) \
|
||||
_(907, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP) \
|
||||
_(908, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR) \
|
||||
_(910, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV) \
|
||||
_(911, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST) \
|
||||
_(912, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP) \
|
||||
_(913, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
|
||||
_(915, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV) \
|
||||
_(916, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
|
||||
_(917, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
|
||||
_(918, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(920, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(921, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
|
||||
_(922, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
|
||||
_(923, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(925, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(931, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST) \
|
||||
_(932, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP) \
|
||||
_(933, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR) \
|
||||
_(935, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV) \
|
||||
_(911, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST) \
|
||||
_(912, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP) \
|
||||
_(913, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR) \
|
||||
_(915, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV) \
|
||||
_(916, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
|
||||
_(917, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
|
||||
_(918, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(920, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||
_(921, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
|
||||
_(922, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
|
||||
_(923, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(925, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||
_(931, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST) \
|
||||
_(932, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP) \
|
||||
_(933, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR) \
|
||||
_(935, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV) \
|
||||
_(936, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) \
|
||||
_(937, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) \
|
||||
_(938, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) \
|
||||
|
@ -522,14 +506,10 @@
|
|||
_(1038, ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR) \
|
||||
_(1039, ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED) \
|
||||
_(1040, ZEND_ASSIGN_DIM_OP_SPEC_CV_CV) \
|
||||
_(1046, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST) \
|
||||
_(1047, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1048, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1050, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV) \
|
||||
_(1051, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST) \
|
||||
_(1052, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1053, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1055, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV) \
|
||||
_(1051, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST) \
|
||||
_(1052, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
|
||||
_(1053, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
|
||||
_(1055, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV) \
|
||||
_(1056, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST) \
|
||||
_(1057, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
|
||||
_(1058, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
|
||||
|
@ -547,22 +527,14 @@
|
|||
_(1093, ZEND_QM_ASSIGN_SPEC_TMP) \
|
||||
_(1094, ZEND_QM_ASSIGN_SPEC_VAR) \
|
||||
_(1096, ZEND_QM_ASSIGN_SPEC_CV) \
|
||||
_(1124, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
|
||||
_(1126, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV) \
|
||||
_(1129, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(1131, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(1134, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(1136, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(1144, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR) \
|
||||
_(1146, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV) \
|
||||
_(1149, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
|
||||
_(1151, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV) \
|
||||
_(1154, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(1156, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(1159, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(1161, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
||||
_(1169, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR) \
|
||||
_(1171, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV) \
|
||||
_(1149, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR) \
|
||||
_(1151, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV) \
|
||||
_(1154, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(1156, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||
_(1159, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||
_(1161, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||
_(1169, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR) \
|
||||
_(1171, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV) \
|
||||
_(1174, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR) \
|
||||
_(1176, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV) \
|
||||
_(1179, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
|
||||
|
@ -817,14 +789,10 @@
|
|||
_(1578, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
|
||||
_(1579, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
|
||||
_(1580, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
|
||||
_(1586, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST) \
|
||||
_(1587, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1588, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1590, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV) \
|
||||
_(1591, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST) \
|
||||
_(1592, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1593, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1595, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV) \
|
||||
_(1591, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
|
||||
_(1592, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
|
||||
_(1593, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
|
||||
_(1595, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
|
||||
_(1596, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
|
||||
_(1597, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
|
||||
_(1598, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
|
||||
|
@ -847,14 +815,10 @@
|
|||
_(1633, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
|
||||
_(1634, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
|
||||
_(1635, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
|
||||
_(1641, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST) \
|
||||
_(1642, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1643, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1645, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV) \
|
||||
_(1646, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST) \
|
||||
_(1647, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1648, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1650, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV) \
|
||||
_(1646, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
|
||||
_(1647, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
|
||||
_(1648, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
|
||||
_(1650, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
|
||||
_(1651, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
|
||||
_(1652, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
|
||||
_(1653, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
|
||||
|
@ -931,14 +895,14 @@
|
|||
_(1747, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
|
||||
_(1748, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
|
||||
_(1750, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
|
||||
_(1751, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST) \
|
||||
_(1752, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1753, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1755, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV) \
|
||||
_(1756, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST) \
|
||||
_(1757, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1758, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
||||
_(1760, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV) \
|
||||
_(1751, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
|
||||
_(1752, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
|
||||
_(1753, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
|
||||
_(1755, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
|
||||
_(1756, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
|
||||
_(1757, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
|
||||
_(1758, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
|
||||
_(1760, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
|
||||
_(1761, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
|
||||
_(1762, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
|
||||
_(1763, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
|
||||
|
@ -1115,14 +1079,10 @@
|
|||
_(2018, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
|
||||
_(2019, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
|
||||
_(2020, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
|
||||
_(2026, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST) \
|
||||
_(2027, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
|
||||
_(2028, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
|
||||
_(2030, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV) \
|
||||
_(2031, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST) \
|
||||
_(2032, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
|
||||
_(2033, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
|
||||
_(2035, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV) \
|
||||
_(2031, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
|
||||
_(2032, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
|
||||
_(2033, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
|
||||
_(2035, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
|
||||
_(2036, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
|
||||
_(2037, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
|
||||
_(2038, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
|
||||
|
|
|
@ -245,15 +245,15 @@ static uint32_t zend_vm_opcodes_flags[195] = {
|
|||
0x00000b0b,
|
||||
0x00000301,
|
||||
0x00006701,
|
||||
0x00040755,
|
||||
0x00040751,
|
||||
0x00040000,
|
||||
0x04000701,
|
||||
0x04006701,
|
||||
0x04000755,
|
||||
0x04000751,
|
||||
0x04000000,
|
||||
0x0b000101,
|
||||
0x00000003,
|
||||
0x0b040755,
|
||||
0x0b040751,
|
||||
0x0b040000,
|
||||
0x00000001,
|
||||
0x00000001,
|
||||
|
@ -306,16 +306,16 @@ static uint32_t zend_vm_opcodes_flags[195] = {
|
|||
0x00040757,
|
||||
0x00010107,
|
||||
0x00006701,
|
||||
0x00640755,
|
||||
0x00640751,
|
||||
0x00010107,
|
||||
0x00006701,
|
||||
0x00040755,
|
||||
0x00040751,
|
||||
0x00010107,
|
||||
0x00000707,
|
||||
0x00040757,
|
||||
0x00010107,
|
||||
0x00006703,
|
||||
0x00240757,
|
||||
0x00240753,
|
||||
0x00010107,
|
||||
0x00000701,
|
||||
0x00040751,
|
||||
|
@ -353,7 +353,7 @@ static uint32_t zend_vm_opcodes_flags[195] = {
|
|||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00040755,
|
||||
0x00040751,
|
||||
0x00040751,
|
||||
0x00040751,
|
||||
0x00040751,
|
||||
|
|
|
@ -12,9 +12,15 @@ $xml = simplexml_load_string("<root></root>");
|
|||
var_dump(isset($xml->bla->posts));
|
||||
$xml->bla->posts[0]->name = "FooBar";
|
||||
echo $xml->asXML();
|
||||
$xml = simplexml_load_string("<root></root>");
|
||||
$xml->bla->posts[]->name = "FooBar";
|
||||
echo $xml->asXML();
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught Error: Attempt to assign property 'name' of non-object in %s:%d
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in %s on line %d
|
||||
--EXPECT--
|
||||
<?xml version="1.0"?>
|
||||
<root><bla><posts><name>FooBar</name></posts></bla></root>
|
||||
bool(false)
|
||||
<?xml version="1.0"?>
|
||||
<root><bla><posts><name>FooBar</name></posts></bla></root>
|
||||
<?xml version="1.0"?>
|
||||
<root><bla><posts><name>FooBar</name></posts></bla></root>
|
||||
|
|
|
@ -13,5 +13,6 @@ $xml->movie[]->characters->character[0]->name = 'Miss Coder';
|
|||
echo($xml->asXml());
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Cannot use [] for reading in %s on line %d
|
||||
--EXPECT--
|
||||
<?xml version="1.0" standalone="yes"?>
|
||||
<collection><movie><characters><character><name>Miss Coder</name></character></characters></movie></collection>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue