]> granicus.if.org Git - php/commitdiff
Document change to ReflectionMethod->isConstructor/isDestructor
authorTyson Andre <tysonandre775@hotmail.com>
Tue, 21 Apr 2020 23:19:53 +0000 (19:19 -0400)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 22 Apr 2020 13:24:35 +0000 (15:24 +0200)
See https://externals.io/message/109377
This prevented PHPUnit's test doubles from being created for interfaces.

The reason this changed is
https://github.com/php/php-src/pull/3846/files#diff-3a8139128d4026ce0cb0c86beba4e6b9L5549-R5605
(ReflectionMethod::isConstruct checks if the method is the zend_class_entry's
constructor, etc.)

UPGRADING
ext/reflection/tests/ReflectionMethod_basic1.phpt

index b6cc20547143f31c5f5232ac4957eae3ae66daab..000e5866777d1dc57dca938d07ca979e1e63ed3a 100644 (file)
--- a/UPGRADING
+++ b/UPGRADING
@@ -192,7 +192,7 @@ PHP 8.0 UPGRADE NOTES
 - dom:
   . Remove unimplemented classes from ext/dom that had no behavior and contained
     test data. These classes have also been removed in the latest version of DOM
-       standard:
+    standard:
 
      * DOMNameList
      * DomImplementationList
@@ -325,6 +325,9 @@ PHP 8.0 UPGRADE NOTES
         ReflectionParameter::getDefaultValue()
         ReflectionParameter::isDefaultValueConstant()
         ReflectionParameter::getDefaultValueConstantName()
+  . ReflectionMethod::isConstructor() and ReflectionMethod::isDestructor() now
+    also return true for `__construct` and `__destruct` in methods of interfaces.
+    Previously, this would only be true in methods of classes and traits.
 
 - Socket:
   . The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES
index 8eb970babb8bcaca013022d5c4537de332c35c43..e065d28ec62ff7f20b5fef098618fbc004dffbab 100644 (file)
@@ -49,6 +49,14 @@ class DerivedClass extends TestClass {}
 
 interface TestInterface {
     public function int();
+    public function __construct($arg);
+    public function __destruct();
+}
+
+trait TestTrait {
+    public abstract function __construct();
+    public function __destruct() {
+    }
 }
 
 reflectMethod("DerivedClass", "foo");
@@ -59,6 +67,10 @@ reflectMethod("DerivedClass", "prot");
 reflectMethod("TestInterface", "int");
 reflectMethod("ReflectionProperty", "__construct");
 reflectMethod("TestClass", "__destruct");
+reflectMethod("TestInterface", "__construct");
+reflectMethod("TestInterface", "__destruct");
+reflectMethod("TestTrait", "__construct");
+reflectMethod("TestTrait", "__destruct");
 
 ?>
 --EXPECT--
@@ -269,6 +281,122 @@ bool(false)
 Reflecting on method TestClass::__destruct()
 
 
+isFinal():
+bool(false)
+
+isAbstract():
+bool(false)
+
+isPublic():
+bool(true)
+
+isPrivate():
+bool(false)
+
+isProtected():
+bool(false)
+
+isStatic():
+bool(false)
+
+isConstructor():
+bool(false)
+
+isDestructor():
+bool(true)
+
+**********************************
+**********************************
+Reflecting on method TestInterface::__construct()
+
+
+isFinal():
+bool(false)
+
+isAbstract():
+bool(true)
+
+isPublic():
+bool(true)
+
+isPrivate():
+bool(false)
+
+isProtected():
+bool(false)
+
+isStatic():
+bool(false)
+
+isConstructor():
+bool(true)
+
+isDestructor():
+bool(false)
+
+**********************************
+**********************************
+Reflecting on method TestInterface::__destruct()
+
+
+isFinal():
+bool(false)
+
+isAbstract():
+bool(true)
+
+isPublic():
+bool(true)
+
+isPrivate():
+bool(false)
+
+isProtected():
+bool(false)
+
+isStatic():
+bool(false)
+
+isConstructor():
+bool(false)
+
+isDestructor():
+bool(true)
+
+**********************************
+**********************************
+Reflecting on method TestTrait::__construct()
+
+
+isFinal():
+bool(false)
+
+isAbstract():
+bool(true)
+
+isPublic():
+bool(true)
+
+isPrivate():
+bool(false)
+
+isProtected():
+bool(false)
+
+isStatic():
+bool(false)
+
+isConstructor():
+bool(true)
+
+isDestructor():
+bool(false)
+
+**********************************
+**********************************
+Reflecting on method TestTrait::__destruct()
+
+
 isFinal():
 bool(false)