コード例 #1
0
ファイル: invoke.zep.c プロジェクト: dreamsxin/zephir
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();

}
コード例 #2
0
ファイル: fcall.zep.c プロジェクト: LegendZhu/zephir
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();

}
コード例 #3
0
/**
 * 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);

}