static int zend_closure_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot) /* {{{ */
{
- if (has_set_exists != 2) {
+ if (has_set_exists != ZEND_PROPERTY_EXISTS) {
ZEND_CLOSURE_PROPERTY_ERROR();
}
return 0;
}
found:
switch (has_set_exists) {
- case 0:
+ case ZEND_PROPERTY_ISSET:
ZVAL_DEREF(value);
result = (Z_TYPE_P(value) != IS_NULL);
break;
+ case ZEND_PROPERTY_EXISTS:
+ result = 1;
+ break;
+ case ZEND_PROPERTY_HAS:
default:
result = zend_is_true(value);
break;
- case 2:
- result = 1;
- break;
}
goto exit;
}
}
result = 0;
- if ((has_set_exists != 2) && zobj->ce->__isset) {
+ if ((has_set_exists != ZEND_PROPERTY_EXISTS) && zobj->ce->__isset) {
uint32_t *guard = zend_get_property_guard(zobj, Z_STR_P(member));
if (!((*guard) & IN_ISSET)) {
if (Z_TYPE(rv) != IS_UNDEF) {
result = zend_is_true(&rv);
zval_ptr_dtor(&rv);
- if (has_set_exists && result) {
+ if (has_set_exists == ZEND_PROPERTY_HAS && result) {
if (EXPECTED(!EG(exception)) && zobj->ce->__get && !((*guard) & IN_GET)) {
(*guard) |= IN_GET;
zend_std_call_getter(zobj, member, &rv);
#define zend_get_function_root_class(fbc) \
((fbc)->common.prototype ? (fbc)->common.prototype->common.scope : (fbc)->common.scope)
+#define ZEND_PROPERTY_ISSET 0x0 /* Property is exists and not NULL */
+#define ZEND_PROPERTY_HAS 0x1 /* Property is exists and is TRUE */
+#define ZEND_PROPERTY_EXISTS 0x2 /* Property is exists */
+
ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name_strval, const zval *key);
ZEND_API zval *zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, zend_bool silent);
ZEND_API ZEND_COLD zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_string *property_name);
if ((p = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member))) != NULL) {
switch (has_set_exists) {
- case 2:
+ case ZEND_PROPERTY_EXISTS:
ret = 1;
break;
- case 1: {
+ case ZEND_PROPERTY_HAS: {
zval rv;
zval *value = mysqli_read_property(object, member, BP_VAR_IS, cache_slot, &rv);
if (value != &EG(uninitialized_zval)) {
}
break;
}
- case 0:{
+ case ZEND_PROPERTY_ISSET: {
zval rv;
zval *value = mysqli_read_property(object, member, BP_VAR_IS, cache_slot, &rv);
if (value != &EG(uninitialized_zval)) {
if ((hnd = zend_hash_find_ptr(&php_snmp_properties, Z_STR_P(member))) != NULL) {
switch (has_set_exists) {
- case 2:
+ case ZEND_PROPERTY_EXISTS:
ret = 1;
break;
- case 0: {
+ case ZEND_PROPERTY_ISSET: {
zval *value = php_snmp_read_property(object, member, BP_VAR_IS, cache_slot, &rv);
if (value != &EG(uninitialized_zval)) {
ret = Z_TYPE_P(value) != IS_NULL? 1 : 0;
spl_array_object *intern = Z_SPLARRAY_P(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, 2, NULL)) {
+ && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
return spl_array_read_dimension(object, member, type, rv);
}
return zend_std_read_property(object, member, type, cache_slot, rv);
spl_array_object *intern = Z_SPLARRAY_P(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, 2, NULL)) {
+ && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
spl_array_write_dimension(object, member, value);
return;
}
spl_array_object *intern = Z_SPLARRAY_P(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, 2, NULL)) {
+ && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
/* If object has offsetGet() overridden, then fallback to read_property,
* which will call offsetGet(). */
if (intern->fptr_offset_get) {
spl_array_object *intern = Z_SPLARRAY_P(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, 2, NULL)) {
+ && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
return spl_array_has_dimension(object, member, has_set_exists);
}
return zend_std_has_property(object, member, has_set_exists, cache_slot);
spl_array_object *intern = Z_SPLARRAY_P(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, 2, NULL)) {
+ && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
spl_array_unset_dimension(object, member);
return;
}
/* The has_property check is first performed in "exists" mode (which returns true for
* properties that are null but exist) and then in "has" mode to handle objects that
* implement __isset (which is not called in "exists" mode). */
- if (Z_OBJ_HANDLER_P(data, has_property)(data, name, 2, NULL)
- || Z_OBJ_HANDLER_P(data, has_property)(data, name, 0, NULL)) {
+ if (Z_OBJ_HANDLER_P(data, has_property)(data, name, ZEND_PROPERTY_EXISTS, NULL)
+ || Z_OBJ_HANDLER_P(data, has_property)(data, name, ZEND_PROPERTY_ISSET, NULL)) {
prop = Z_OBJ_HANDLER_P(data, read_property)(data, name, BP_VAR_R, NULL, rv);
if (prop) {
ZVAL_DEREF(prop);