summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Watkins <krakjoe@php.net>2019-10-21 09:24:57 +0200
committerJoe Watkins <krakjoe@php.net>2019-10-21 09:25:24 +0200
commit174ab25fd47d9bc0f370419eeb12e4b4e4f6084f (patch)
treefc0383be4a075d98b57beb53f6ee26cd579e6157
parentc797ed5cc76ab23de33c90702cdc230f48b087c4 (diff)
parent1ac961bea85930d9c71bcca349ee4b9d84edd3b8 (diff)
downloadphp-git-174ab25fd47d9bc0f370419eeb12e4b4e4f6084f.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix bug #78697: inaccurate error message
-rw-r--r--NEWS4
-rw-r--r--ext/reflection/php_reflection.c2
-rw-r--r--ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt60
-rw-r--r--ext/reflection/tests/bug78697.phpt14
4 files changed, 49 insertions, 31 deletions
diff --git a/NEWS b/NEWS
index 753fa5806c..f914d9d264 100644
--- a/NEWS
+++ b/NEWS
@@ -58,6 +58,10 @@ PHP NEWS
(krakjoe)
. Fixed bug #77805 (phpdbg build fails when readline is shared). (krakjoe)
+- Reflection:
+ . Fixed bug #78697 (ReflectionClass::implementsInterface - inaccurate error
+ message with traits). (villfa)
+
- Session:
. Fixed bug #78624 (session_gc return value for user defined session
handlers). (bshaffer)
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 4e556b3cbc..e4a065989a 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -4990,7 +4990,7 @@ ZEND_METHOD(reflection_class, implementsInterface)
if (!(interface_ce->ce_flags & ZEND_ACC_INTERFACE)) {
zend_throw_exception_ex(reflection_exception_ptr, 0,
- "Interface %s is a Class", ZSTR_VAL(interface_ce->name));
+ "%s is not an interface", ZSTR_VAL(interface_ce->name));
return;
}
RETURN_BOOL(instanceof_function(ce, interface_ce));
diff --git a/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt b/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt
index b0deab33da..5176dd75ad 100644
--- a/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt
+++ b/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt
@@ -67,14 +67,14 @@ try {
?>
--EXPECTF--
Does A implement A?
- - Using object argument: Interface A is a Class
- - Using string argument: Interface A is a Class
+ - Using object argument: A is not an interface
+ - Using string argument: A is not an interface
Does A implement B?
- - Using object argument: Interface B is a Class
- - Using string argument: Interface B is a Class
+ - Using object argument: B is not an interface
+ - Using string argument: B is not an interface
Does A implement C?
- - Using object argument: Interface C is a Class
- - Using string argument: Interface C is a Class
+ - Using object argument: C is not an interface
+ - Using string argument: C is not an interface
Does A implement I1?
- Using object argument: bool(true)
- Using string argument: bool(true)
@@ -82,14 +82,14 @@ Does A implement I2?
- Using object argument: bool(false)
- Using string argument: bool(false)
Does B implement A?
- - Using object argument: Interface A is a Class
- - Using string argument: Interface A is a Class
+ - Using object argument: A is not an interface
+ - Using string argument: A is not an interface
Does B implement B?
- - Using object argument: Interface B is a Class
- - Using string argument: Interface B is a Class
+ - Using object argument: B is not an interface
+ - Using string argument: B is not an interface
Does B implement C?
- - Using object argument: Interface C is a Class
- - Using string argument: Interface C is a Class
+ - Using object argument: C is not an interface
+ - Using string argument: C is not an interface
Does B implement I1?
- Using object argument: bool(true)
- Using string argument: bool(true)
@@ -97,14 +97,14 @@ Does B implement I2?
- Using object argument: bool(false)
- Using string argument: bool(false)
Does C implement A?
- - Using object argument: Interface A is a Class
- - Using string argument: Interface A is a Class
+ - Using object argument: A is not an interface
+ - Using string argument: A is not an interface
Does C implement B?
- - Using object argument: Interface B is a Class
- - Using string argument: Interface B is a Class
+ - Using object argument: B is not an interface
+ - Using string argument: B is not an interface
Does C implement C?
- - Using object argument: Interface C is a Class
- - Using string argument: Interface C is a Class
+ - Using object argument: C is not an interface
+ - Using string argument: C is not an interface
Does C implement I1?
- Using object argument: bool(true)
- Using string argument: bool(true)
@@ -112,14 +112,14 @@ Does C implement I2?
- Using object argument: bool(true)
- Using string argument: bool(true)
Does I1 implement A?
- - Using object argument: Interface A is a Class
- - Using string argument: Interface A is a Class
+ - Using object argument: A is not an interface
+ - Using string argument: A is not an interface
Does I1 implement B?
- - Using object argument: Interface B is a Class
- - Using string argument: Interface B is a Class
+ - Using object argument: B is not an interface
+ - Using string argument: B is not an interface
Does I1 implement C?
- - Using object argument: Interface C is a Class
- - Using string argument: Interface C is a Class
+ - Using object argument: C is not an interface
+ - Using string argument: C is not an interface
Does I1 implement I1?
- Using object argument: bool(true)
- Using string argument: bool(true)
@@ -127,14 +127,14 @@ Does I1 implement I2?
- Using object argument: bool(false)
- Using string argument: bool(false)
Does I2 implement A?
- - Using object argument: Interface A is a Class
- - Using string argument: Interface A is a Class
+ - Using object argument: A is not an interface
+ - Using string argument: A is not an interface
Does I2 implement B?
- - Using object argument: Interface B is a Class
- - Using string argument: Interface B is a Class
+ - Using object argument: B is not an interface
+ - Using string argument: B is not an interface
Does I2 implement C?
- - Using object argument: Interface C is a Class
- - Using string argument: Interface C is a Class
+ - Using object argument: C is not an interface
+ - Using string argument: C is not an interface
Does I2 implement I1?
- Using object argument: bool(true)
- Using string argument: bool(true)
diff --git a/ext/reflection/tests/bug78697.phpt b/ext/reflection/tests/bug78697.phpt
new file mode 100644
index 0000000000..b35d0f4d4e
--- /dev/null
+++ b/ext/reflection/tests/bug78697.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #78697: ReflectionClass::implementsInterface - inaccurate error message with traits
+--FILE--
+<?php
+trait T {}
+
+try {
+ (new ReflectionClass(new stdClass))->implementsInterface(T::class);
+} catch (ReflectionException $e) {
+ echo $e->getMessage();
+}
+?>
+--EXPECT--
+T is not an interface