Hello Internals, apparently overloaded objects do not need to implement property access and we issue an E_NOTICE in case someone tries to none-the-less. Dmirty thankfully made this consistent for all handlers now. However this raised a question on my side, whether we should increase the severity to E_WARNING or even better E_RECOVERABLE_ERROR. To me the latter choice makes the most sense as trying to is most likely a severe issue in the software. For example someone create a database abstraction and then for a new db that has a C level implementation that allows to use the classes directly, probably a third party implementation, the properties are not implemneted. Since the tests were done using the other one errors due to property handling are probably noticed too late. And in the described situation anyway are clear errors rather than notices. And I cannot figure an example where it wouldn't be the case.
marcus Saturday, July 26, 2008, 8:43:57 PM, you wrote: > Hi Marcus, > I set the same severity which was used for empty > read_property/write_property. > In case of changing they should be changed too. > I have no preference, so if you are interested in the change please > discuss it on @internals. > Thanks. Dmitry. > Marcus Boerger wrote: >> Hello Dmitry, >> >> can we increase the severity here? The user might think he is using a >> normal object and relying on the property assignment to work. Imo it should >> be an E_WARNING or even better an E_RECOVERABLE_ERROR. >> >> marcus >> >> Saturday, July 26, 2008, 4:08:16 PM, you wrote: >> >>> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.716.2.12.2.24.2.32&r2=1.716.2.12.2.24.2.33&diff_format=u >>> Index: ZendEngine2/zend_execute.c >>> diff -u ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.32 >>> ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.33 >>> --- ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.32 Mon Jul 14 09:49:00 >>> 2008 >>> +++ ZendEngine2/zend_execute.c Sat Jul 26 14:08:10 2008 >>> @@ -17,7 +17,7 @@ >>> >>> +----------------------------------------------------------------------+ >>> */ >>> >>> -/* $Id: zend_execute.c,v 1.716.2.12.2.24.2.32 2008/07/14 09:49:00 dmitry >>> Exp $ */ >>> +/* $Id: zend_execute.c,v 1.716.2.12.2.24.2.33 2008/07/26 14:08:10 dmitry >>> Exp $ */ >>> >>> #define ZEND_INTENSIVE_DEBUGGING 0 >>> >>> @@ -594,6 +594,11 @@ >>> *retval = EG(uninitialized_zval_ptr); >>> PZVAL_LOCK(*retval); >>> } >>> + if (value_op->op_type == IS_TMP_VAR) { >>> + FREE_ZVAL(value); >>> + } else if (value_op->op_type == IS_CONST) { >>> + zval_ptr_dtor(&value); >>> + } >>> FREE_OP(free_value); >>> return; >>> } >>> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.59.2.29.2.48.2.63&r2=1.59.2.29.2.48.2.64&diff_format=u >>> Index: ZendEngine2/zend_vm_def.h >>> diff -u ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.63 >>> ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.64 >>> --- ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.63 Sat Jul 26 13:14:00 >>> 2008 >>> +++ ZendEngine2/zend_vm_def.h Sat Jul 26 14:08:11 2008 >>> @@ -18,7 +18,7 @@ >>> >>> +----------------------------------------------------------------------+ >>> */ >>> >>> -/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.63 2008/07/26 13:14:00 dmitry Exp >>> $ */ >>> +/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.64 2008/07/26 14:08:11 dmitry Exp >>> $ */ >>> >>> /* If you change this file, please regenerate the zend_vm_execute.h and >>> * zend_vm_opcodes.h files by running: >>> @@ -3479,7 +3479,11 @@ >>> if (IS_OP2_TMP_FREE()) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (IS_OP2_TMP_FREE()) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -3936,9 +3940,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (IS_OP2_TMP_FREE()) { >>> zval_ptr_dtor(&offset); >>> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.62.2.30.2.49.2.63&r2=1.62.2.30.2.49.2.64&diff_format=u >>> Index: ZendEngine2/zend_vm_execute.h >>> diff -u ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.63 >>> ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.64 >>> --- ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.63 Sat Jul 26 13:14:00 >>> 2008 >>> +++ ZendEngine2/zend_vm_execute.h Sat Jul 26 14:08:11 2008 >>> @@ -10688,7 +10688,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -10777,9 +10781,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -12457,7 +12471,11 @@ >>> if (1) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (1) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -12546,9 +12564,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (1) { >>> zval_ptr_dtor(&offset); >>> @@ -14273,7 +14301,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -14362,9 +14394,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -16702,7 +16744,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -16791,9 +16837,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -17875,7 +17931,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -17963,9 +18023,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -18894,7 +18964,11 @@ >>> if (1) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (1) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -18982,9 +19056,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (1) { >>> zval_ptr_dtor(&offset); >>> @@ -19913,7 +19997,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -20001,9 +20089,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -21202,7 +21300,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -21290,9 +21392,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -24133,7 +24245,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -24221,9 +24337,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -25783,7 +25909,11 @@ >>> if (1) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (1) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -25871,9 +26001,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (1) { >>> zval_ptr_dtor(&offset); >>> @@ -27479,7 +27619,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -27567,9 +27711,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> @@ -29679,7 +29833,11 @@ >>> if (0) { >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> - >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->unset_property) { >>> + >>> Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to unset >>> property of non-object"); >>> + } >>> if (0) { >>> zval_ptr_dtor(&offset); >>> } else { >>> @@ -29767,9 +29925,19 @@ >>> MAKE_REAL_ZVAL_PTR(offset); >>> } >>> if (prop_dim) { >>> - result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if (Z_OBJ_HT_P(*container)->has_property) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_property(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check property of non-object"); >>> + result = 0; >>> + } >>> } else { >>> - result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + if >>> (Z_OBJ_HT_P(*container)->has_dimension) { >>> + result = >>> Z_OBJ_HT_P(*container)->has_dimension(*container, offset, >>> (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); >>> + } else { >>> + zend_error(E_NOTICE, "Trying to >>> check element of non-array"); >>> + result = 0; >>> + } >>> } >>> if (0) { >>> zval_ptr_dtor(&offset); >> >> >> >> >> Best regards, >> Marcus >> Best regards, Marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php