diff --git a/Zend/tests/gh14009_005.phpt b/Zend/tests/gh14009_005.phpt new file mode 100644 index 0000000000000..c079bfb832aa8 --- /dev/null +++ b/Zend/tests/gh14009_005.phpt @@ -0,0 +1,38 @@ +--TEST-- +GH-14009: Traits inherit prototype +--FILE-- + ". __CLASS__ . "::" . __METHOD__ . "\n"; + } +} + +class A { + use T; + public function foo() { + $this->test(__METHOD__); + } + public function bar() { + $this->test(__METHOD__); + } +} + +class B extends A { + use T; + public function foo() { + $this->test(__METHOD__); + } +} + +(new A)->foo(); +(new A)->bar(); +(new B)->foo(); +(new B)->bar(); +?> +--EXPECT-- +A::foo -> A::T::test +A::bar -> A::T::test +B::foo -> B::T::test +A::bar -> A::T::test diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 695d31be0fbfe..8c7ea963891bf 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -1936,7 +1936,8 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_ do_inheritance_check_on_method( fn, fixup_trait_scope(fn, ce), existing_fn, fixup_trait_scope(existing_fn, ce), ce, NULL, - ZEND_INHERITANCE_CHECK_PROTO | ZEND_INHERITANCE_CHECK_VISIBILITY | ZEND_INHERITANCE_SET_CHILD_PROTO); + ZEND_INHERITANCE_CHECK_PROTO | ZEND_INHERITANCE_CHECK_VISIBILITY | + ZEND_INHERITANCE_SET_CHILD_CHANGED| ZEND_INHERITANCE_SET_CHILD_PROTO); } } /* }}} */