From: Johannes Schlüter Date: Sun, 21 Nov 2010 12:24:09 +0000 (+0000) Subject: - Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without... X-Git-Tag: php-5.4.0alpha1~191^2~621 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a1e9d1d6b1326175b1327919786364a0d1b4a58;p=php - Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without constructors --- diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 9f06deeabf..fce1b583c4 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4296,7 +4296,7 @@ ZEND_METHOD(reflection_class, newInstanceArgs) if (params) { efree(params); } - } else if (!ZEND_NUM_ARGS()) { + } else if (!ZEND_NUM_ARGS() || !argc) { object_init_ex(return_value, ce); } else { zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not have a constructor, so you cannot pass any constructor arguments", ce->name); diff --git a/ext/reflection/tests/bug52854.phpt b/ext/reflection/tests/bug52854.phpt new file mode 100644 index 0000000000..94f79d858b --- /dev/null +++ b/ext/reflection/tests/bug52854.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #52854: ReflectionClass::newInstanceArgs does not work for classes without constructors +--FILE-- +newInstance()); +var_dump($c->newInstanceArgs(array())); + +try { + var_dump($c->newInstanceArgs(array(1))); +} catch(ReflectionException $e) { + echo $e->getMessage()."\n"; +} +?> +--EXPECTF-- +object(Test)#2 (0) { +} +object(Test)#2 (0) { +} +object(Test)#2 (0) { +} +object(Test)#2 (0) { +} +Class Test does not have a constructor, so you cannot pass any constructor arguments