@@ -1115,7 +1115,20 @@ static zend_bool zend_traits_method_compatibility_check(zend_function *fn, zend_
1115
1115
1116
1116
static void zend_add_magic_methods (zend_class_entry * ce , zend_string * mname , zend_function * fe ) /* {{{ */
1117
1117
{
1118
- if (zend_string_equals_literal (mname , ZEND_CLONE_FUNC_NAME )) {
1118
+ if (ZSTR_LEN (ce -> name ) == ZSTR_LEN (mname )) {
1119
+ zend_string * lowercase_name = zend_string_tolower (ce -> name );
1120
+ lowercase_name = zend_new_interned_string (lowercase_name );
1121
+ if (!memcmp (ZSTR_VAL (mname ), ZSTR_VAL (lowercase_name ), ZSTR_LEN (mname ))) {
1122
+ if (ce -> constructor && (!ce -> parent || ce -> constructor != ce -> parent -> constructor )) {
1123
+ zend_error_noreturn (E_COMPILE_ERROR , "%s has colliding constructor definitions coming from traits" , ZSTR_VAL (ce -> name ));
1124
+ }
1125
+ ce -> constructor = fe ;
1126
+ fe -> common .fn_flags |= ZEND_ACC_CTOR ;
1127
+ }
1128
+ zend_string_release_ex (lowercase_name , 0 );
1129
+ } else if (ZSTR_VAL (mname )[0 ] != '_' || ZSTR_VAL (mname )[1 ] != '_' ) {
1130
+ /* pass */
1131
+ } else if (zend_string_equals_literal (mname , ZEND_CLONE_FUNC_NAME )) {
1119
1132
ce -> clone = fe ;
1120
1133
} else if (zend_string_equals_literal (mname , ZEND_CONSTRUCTOR_FUNC_NAME )) {
1121
1134
if (ce -> constructor && (!ce -> parent || ce -> constructor != ce -> parent -> constructor )) {
@@ -1144,17 +1157,6 @@ static void zend_add_magic_methods(zend_class_entry* ce, zend_string* mname, zen
1144
1157
ce -> __tostring = fe ;
1145
1158
} else if (zend_string_equals_literal (mname , ZEND_DEBUGINFO_FUNC_NAME )) {
1146
1159
ce -> __debugInfo = fe ;
1147
- } else if (ZSTR_LEN (ce -> name ) == ZSTR_LEN (mname )) {
1148
- zend_string * lowercase_name = zend_string_tolower (ce -> name );
1149
- lowercase_name = zend_new_interned_string (lowercase_name );
1150
- if (!memcmp (ZSTR_VAL (mname ), ZSTR_VAL (lowercase_name ), ZSTR_LEN (mname ))) {
1151
- if (ce -> constructor && (!ce -> parent || ce -> constructor != ce -> parent -> constructor )) {
1152
- zend_error_noreturn (E_COMPILE_ERROR , "%s has colliding constructor definitions coming from traits" , ZSTR_VAL (ce -> name ));
1153
- }
1154
- ce -> constructor = fe ;
1155
- fe -> common .fn_flags |= ZEND_ACC_CTOR ;
1156
- }
1157
- zend_string_release_ex (lowercase_name , 0 );
1158
1160
}
1159
1161
}
1160
1162
/* }}} */
0 commit comments