45 if (param_count > 0) {
48 if (param_count > 1) {
53 obj_ce =
object ?
object->ce :
NULL;
55 if (!fn_proxy || !*fn_proxy) {
78 called_scope =
object->ce;
80 called_scope = obj_ce;
93 zend_call_known_instance_method_with_0_params(
130 bool result = i_zend_is_true(&more);
158 zend_unwrap_reference(
key);
193 zend_get_gc_buffer_add_zval(gc_buffer, &iter->
it.
data);
194 zend_get_gc_buffer_add_zval(gc_buffer, &iter->
value);
195 zend_get_gc_buffer_use(gc_buffer, table,
n);
227 iterator->
it.
funcs = &zend_interface_iterator_funcs_iterator;
253 new_iterator = ce_it->
get_iterator(ce_it, &iterator, by_ref);
278 zend_get_object_type_uc(class_type),
292 "Class %s cannot implement both Iterator and IteratorAggregate at the same time",
305 &class_type->
function_table,
"getiterator",
sizeof(
"getiterator") - 1);
334 "Class %s cannot implement both Iterator and IteratorAggregate at the same time",
345 funcs_ptr->
zf_rewind = zend_hash_str_find_ptr(
347 funcs_ptr->
zf_valid = zend_hash_str_find_ptr(
349 funcs_ptr->
zf_key = zend_hash_find_ptr(
351 funcs_ptr->
zf_current = zend_hash_str_find_ptr(
353 funcs_ptr->
zf_next = zend_hash_str_find_ptr(
357 && class_type->
get_iterator != zend_user_it_get_iterator
393 &class_type->
function_table,
"offsetget",
sizeof(
"offsetget") - 1);
395 &class_type->
function_table,
"offsetexists",
sizeof(
"offsetexists") - 1);
397 &class_type->
function_table,
"offsetset",
sizeof(
"offsetset") - 1);
399 &class_type->
function_table,
"offsetunset",
sizeof(
"offsetunset") - 1);
412 zend_call_method_with_0_params(
452 zend_call_method_with_1_params(
480 zend_error(
E_DEPRECATED,
"%s implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary)",
ZSTR_VAL(class_type->
name));
483 "During inheritance of %s, while implementing Serializable",
ZSTR_VAL(class_type->
name));
520static void zend_internal_iterator_free(
zend_object *obj) {
565 if (zend_internal_iterator_ensure_rewound(intern) ==
FAILURE) {
583 if (zend_internal_iterator_ensure_rewound(intern) ==
FAILURE) {
602 if (zend_internal_iterator_ensure_rewound(intern) ==
FAILURE) {
619 if (zend_internal_iterator_ensure_rewound(intern) ==
FAILURE) {
678 zend_internal_iterator_handlers.clone_obj =
NULL;
679 zend_internal_iterator_handlers.free_obj = zend_internal_iterator_free;
sizeof(Countable|array $value, int $mode=COUNT_NORMAL)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
unsigned char key[REFLECTION_KEY_LEN]
zend_function * zf_offsetget
zend_function * zf_offsetunset
zend_function * zf_offsetset
zend_function * zf_offsetexists
zend_class_iterator_funcs * iterator_funcs_ptr
zend_object_iterator *(* get_iterator)(zend_class_entry *ce, zval *object, int by_ref)
zend_function * __unserialize
zend_class_arrayaccess_funcs * arrayaccess_funcs_ptr
zend_function * __serialize
zend_class_entry ** interfaces
zend_class_entry * parent
int(* serialize)(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data)
int(* unserialize)(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data)
zend_function * zf_new_iterator
zend_function * zf_current
zend_function * zf_rewind
void(* get_current_key)(zend_object_iterator *iter, zval *key)
void(* rewind)(zend_object_iterator *iter)
void(* move_forward)(zend_object_iterator *iter)
zend_result(* valid)(zend_object_iterator *iter)
zval *(* get_current_data)(zend_object_iterator *iter)
const zend_object_iterator_funcs * funcs
zend_object_iterator * iter
struct _zend_function::@236135173067030250234125302313220025134003177336 common
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, const char *format,...)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
struct _zend_unserialize_data zend_unserialize_data
struct _zend_serialize_data zend_serialize_data
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
#define RETURN_COPY_DEREF(zv)
#define ZEND_PARSE_PARAMETERS_NONE()
#define ZEND_METHOD(classname, name)
ZEND_API void zend_call_known_function(zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params)
#define ZVAL_STRINGL(z, s, l)
#define estrndup(s, length)
#define pemalloc(size, persistent)
#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS
#define ZEND_ACC_RESOLVED_INTERFACES
#define ZEND_INTERNAL_CLASS
ZEND_NORETURN void zend_exception_uncaught_error(const char *format,...)
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
ZEND_API zend_function *ZEND_FASTCALL zend_fetch_function_str(const char *name, size_t len)
union _zend_function zend_function
ZEND_API zend_get_gc_buffer * zend_get_gc_buffer_create(void)
ZEND_API void * zend_hash_str_find_ptr_lc(const HashTable *ht, const char *str, size_t len)
ZEND_API zend_class_entry * zend_ce_countable
ZEND_API void zend_user_it_invalidate_current(zend_object_iterator *_iter)
ZEND_API zend_class_entry * zend_ce_iterator
ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter)
ZEND_API zend_result zend_user_it_valid(zend_object_iterator *_iter)
ZEND_API int zend_user_unserialize(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data)
ZEND_API void zend_register_interfaces(void)
ZEND_API zend_class_entry * zend_ce_serializable
ZEND_API void zend_user_it_move_forward(zend_object_iterator *_iter)
ZEND_API zend_class_entry * zend_ce_traversable
ZEND_API zend_class_entry * zend_ce_stringable
ZEND_API zend_class_entry * zend_ce_arrayaccess
ZEND_API HashTable * zend_user_it_get_gc(zend_object_iterator *_iter, zval **table, int *n)
ZEND_API int zend_user_serialize(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data)
ZEND_API zend_object_iterator * zend_user_it_get_new_iterator(zend_class_entry *ce, zval *object, int by_ref)
ZEND_API zend_class_entry * zend_ce_aggregate
ZEND_API zend_result zend_create_internal_iterator_zval(zval *return_value, zval *obj)
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key)
ZEND_API zval * zend_user_it_get_current_data(zend_object_iterator *_iter)
ZEND_API void zend_user_it_new_iterator(zend_class_entry *ce, zval *object, zval *retval)
ZEND_API zval * zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval_ptr, uint32_t param_count, zval *arg1, zval *arg2)
ZEND_API zend_class_entry * zend_ce_internal_iterator
struct _zend_user_iterator zend_user_iterator
ZEND_API void zend_iterator_init(zend_object_iterator *iter)
ZEND_API void zend_iterator_dtor(zend_object_iterator *iter)
struct _zend_class_arrayaccess_funcs zend_class_arrayaccess_funcs
struct _zend_class_iterator_funcs zend_class_iterator_funcs
struct _zend_object_iterator zend_object_iterator
struct _zend_object_iterator_funcs zend_object_iterator_funcs
#define zend_get_std_object_handlers()
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API bool ZEND_FASTCALL zend_class_implements_interface(const zend_class_entry *class_ce, const zend_class_entry *interface_ce)
#define EXPECTED(condition)
#define UNEXPECTED(condition)
ZEND_API zend_object_iterator * zend_hooked_object_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_ISREF_P(zval_p)
struct _zend_array HashTable
#define Z_OBJCE_P(zval_p)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
struct _zend_object_handlers zend_object_handlers
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)