]> granicus.if.org Git - php/commitdiff
- Fix #52854 (ReflectionClass::newInstanceArgs does not work for classes without...
authorJohannes Schlüter <johannes@php.net>
Sun, 21 Nov 2010 12:24:09 +0000 (12:24 +0000)
committerJohannes Schlüter <johannes@php.net>
Sun, 21 Nov 2010 12:24:09 +0000 (12:24 +0000)
ext/reflection/php_reflection.c
ext/reflection/tests/bug52854.phpt [new file with mode: 0644]

index 9f06deeabf91418d11e69fcf72ae0a161d0788f8..fce1b583c4e7906e80ee6f9b801150f013a1de31 100644 (file)
@@ -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 (file)
index 0000000..94f79d8
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Bug #52854: ReflectionClass::newInstanceArgs does not work for classes without constructors
+--FILE--
+<?php
+class Test {
+}
+$c = new ReflectionClass('Test');
+var_dump(new Test);
+var_dump(new Test());
+var_dump($c->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