mirror of
https://github.com/php/php-src.git
synced 2026-04-26 01:18:19 +02:00
Merge branch 'PHP-7.3'
* PHP-7.3: Fix #76773 - Methods with a concrete scope need to be added again
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
--TEST--
|
||||
Bug #76773 (Traits used on the parent are ignored for child classes)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
trait MyTrait
|
||||
{
|
||||
public function hello()
|
||||
{
|
||||
echo __CLASS__, "\n";
|
||||
|
||||
if (\is_callable(array('parent', __FUNCTION__))) {
|
||||
parent::hello();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ParentClass
|
||||
{
|
||||
use MyTrait;
|
||||
}
|
||||
|
||||
class ChildClass extends ParentClass
|
||||
{
|
||||
use MyTrait;
|
||||
}
|
||||
|
||||
$c = new ChildClass();
|
||||
$c->hello();
|
||||
|
||||
--EXPECT--
|
||||
ChildClass
|
||||
ParentClass
|
||||
@@ -1178,10 +1178,11 @@ static void zend_add_trait_method(zend_class_entry *ce, const char *name, zend_s
|
||||
zend_function *new_fn;
|
||||
|
||||
if ((existing_fn = zend_hash_find_ptr(&ce->function_table, key)) != NULL) {
|
||||
/* if it is the same function with the same visibility regardless of where it is coming from */
|
||||
/* there is no conflict and we do not need to add it again */
|
||||
/* if it is the same function with the same visibility and has not been assigned a class scope yet, regardless
|
||||
* of where it is coming from there is no conflict and we do not need to add it again */
|
||||
if (existing_fn->op_array.opcodes == fn->op_array.opcodes &&
|
||||
(existing_fn->common.fn_flags & ZEND_ACC_PPP_MASK) == (fn->common.fn_flags & ZEND_ACC_PPP_MASK)) {
|
||||
(existing_fn->common.fn_flags & ZEND_ACC_PPP_MASK) == (fn->common.fn_flags & ZEND_ACC_PPP_MASK) &&
|
||||
(existing_fn->common.scope->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user