PHP_METHOD(Test_Invoke, test) { zval func; zend_long ZEPHIR_LAST_CALL_STATUS; zval *this_ptr = getThis(); ZVAL_UNDEF(&func); ZEPHIR_MM_GROW(); ZEPHIR_INIT_VAR(&func); object_init_ex(&func, test_invoke_ce); ZEPHIR_CALL_METHOD(NULL, &func, "__construct", NULL, 42); zephir_check_call_status(); ZEPHIR_RETURN_CALL_ZVAL_FUNCTION(&func, NULL, 0); zephir_check_call_status(); RETURN_MM(); }
PHP_METHOD(Test_Fcall, testCall1FromVar) { int ZEPHIR_LAST_CALL_STATUS; zval *funcName, *_0, *_1; ZEPHIR_MM_GROW(); ZEPHIR_INIT_VAR(funcName); ZVAL_STRING(funcName, "strpos", 1); ZEPHIR_INIT_VAR(_0); ZVAL_STRING(_0, "hello", 0); ZEPHIR_INIT_VAR(_1); ZVAL_STRING(_1, "l", 0); ZEPHIR_RETURN_CALL_ZVAL_FUNCTION(funcName, NULL, _0, _1); zephir_check_temp_parameter(_0); zephir_check_temp_parameter(_1); zephir_check_call_status(); RETURN_MM(); }
/** * Get an object from the container * * @param string offset * @throws \Pdm\Di\Exception\ServiceNotFound * @return mixed */ PHP_METHOD(Pdm_Di_Container, get) { zend_class_entry *_3, *_4; int ZEPHIR_LAST_CALL_STATUS; zval *offset_param = NULL, *service, *className, *instance, *_0, *_1; zval *offset = NULL, *_2; ZEPHIR_MM_GROW(); zephir_fetch_params(1, 1, 0, &offset_param); if (unlikely(Z_TYPE_P(offset_param) != IS_STRING && Z_TYPE_P(offset_param) != IS_NULL)) { zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'offset' must be a string") TSRMLS_CC); RETURN_MM_NULL(); } if (unlikely(Z_TYPE_P(offset_param) == IS_STRING)) { offset = offset_param; } else { ZEPHIR_INIT_VAR(offset); ZVAL_EMPTY_STRING(offset); } ZEPHIR_OBS_VAR(service); _0 = zephir_fetch_nproperty_this(this_ptr, SL("container"), PH_NOISY_CC); if (!(zephir_array_isset_fetch(&service, _0, offset, 0 TSRMLS_CC))) { ZEPHIR_INIT_VAR(_1); object_init_ex(_1, pdm_di_exception_servicenotfound_ce); ZEPHIR_INIT_VAR(_2); ZEPHIR_CONCAT_VS(_2, offset, " is not defined."); ZEPHIR_CALL_METHOD(NULL, _1, "__construct", NULL, _2); zephir_check_call_status(); zephir_throw_exception_debug(_1, "pdm/di/container.zep", 142 TSRMLS_CC); ZEPHIR_MM_RESTORE(); return; } if (Z_TYPE_P(service) == IS_STRING) { _3 = zend_fetch_class(Z_STRVAL_P(service), Z_STRLEN_P(service), ZEND_FETCH_CLASS_AUTO TSRMLS_CC); object_init_ex(return_value, _3); if (zephir_has_constructor(return_value TSRMLS_CC)) { ZEPHIR_CALL_METHOD(NULL, return_value, "__construct", NULL); zephir_check_call_status(); } RETURN_MM(); } if (Z_TYPE_P(service) == IS_ARRAY) { ZEPHIR_OBS_VAR(className); if (zephir_array_isset_string_fetch(&className, service, SS("className"), 0 TSRMLS_CC)) { ZEPHIR_INIT_VAR(instance); _4 = zend_fetch_class(Z_STRVAL_P(className), Z_STRLEN_P(className), ZEND_FETCH_CLASS_AUTO TSRMLS_CC); object_init_ex(instance, _4); if (zephir_has_constructor(instance TSRMLS_CC)) { ZEPHIR_CALL_METHOD(NULL, instance, "__construct", NULL, service); zephir_check_call_status(); } if (Z_TYPE_P(instance) == IS_OBJECT) { if (zephir_instance_of_ev(instance, pdm_di_injectionawareinterface_ce TSRMLS_CC)) { ZEPHIR_CALL_METHOD(NULL, instance, "setdi", NULL, this_ptr); zephir_check_call_status(); } } RETURN_CCTOR(instance); } } if (Z_TYPE_P(service) == IS_OBJECT) { if (zephir_instance_of_ev(service, zend_ce_closure TSRMLS_CC)) { ZEPHIR_RETURN_CALL_ZVAL_FUNCTION(service, NULL); zephir_check_call_status(); RETURN_MM(); } } RETURN_CCTOR(service); }