mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
90 lines
2.3 KiB
Diff
90 lines
2.3 KiB
Diff
|
diff --git a/Zend/tests/gh14480.phpt b/Zend/tests/gh14480.phpt
|
||
|
new file mode 100644
|
||
|
index 0000000000..bab74785b6
|
||
|
--- /dev/null
|
||
|
+++ b/Zend/tests/gh14480.phpt
|
||
|
@@ -0,0 +1,60 @@
|
||
|
+--TEST--
|
||
|
+GH-14480: Method visibility issue
|
||
|
+--FILE--
|
||
|
+<?php
|
||
|
+trait PropertyHelperTrait
|
||
|
+{
|
||
|
+ protected function splitPropertyParts(): void
|
||
|
+ {
|
||
|
+ echo "OK\n";
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+trait OrmPropertyHelperTrait
|
||
|
+{
|
||
|
+ abstract protected function splitPropertyParts(): void;
|
||
|
+
|
||
|
+ protected function addJoinsForNestedProperty(): void
|
||
|
+ {
|
||
|
+ $this->splitPropertyParts();
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+trait SearchFilterTrait
|
||
|
+{
|
||
|
+ use PropertyHelperTrait;
|
||
|
+}
|
||
|
+
|
||
|
+abstract class AbstractFilter
|
||
|
+{
|
||
|
+ use OrmPropertyHelperTrait, PropertyHelperTrait;
|
||
|
+
|
||
|
+ public function apply(): void
|
||
|
+ {
|
||
|
+ $this->filterProperty();
|
||
|
+ }
|
||
|
+
|
||
|
+ abstract protected function filterProperty(): void;
|
||
|
+}
|
||
|
+
|
||
|
+class SearchFilter extends AbstractFilter
|
||
|
+{
|
||
|
+ use SearchFilterTrait;
|
||
|
+ protected function filterProperty(): void
|
||
|
+ {
|
||
|
+ $this->addJoinsForNestedProperty();
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+class FilterExtension
|
||
|
+{
|
||
|
+ public function applyToCollection(): void
|
||
|
+ {
|
||
|
+ (new SearchFilter())->apply();
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+(new FilterExtension)->applyToCollection();
|
||
|
+?>
|
||
|
+--EXPECT--
|
||
|
+OK
|
||
|
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
|
||
|
index 402354baa8..228c5b6e54 100644
|
||
|
--- a/Zend/zend_inheritance.c
|
||
|
+++ b/Zend/zend_inheritance.c
|
||
|
@@ -2018,12 +2018,14 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_
|
||
|
if (check_inheritance) {
|
||
|
/* Inherited members are overridden by members inserted by traits.
|
||
|
* Check whether the trait method fulfills the inheritance requirements. */
|
||
|
+ uint32_t flags = ZEND_INHERITANCE_CHECK_PROTO | ZEND_INHERITANCE_CHECK_VISIBILITY;
|
||
|
+ if (!(existing_fn->common.scope->ce_flags & ZEND_ACC_TRAIT)) {
|
||
|
+ flags |= ZEND_INHERITANCE_SET_CHILD_CHANGED |ZEND_INHERITANCE_SET_CHILD_PROTO |
|
||
|
+ ZEND_INHERITANCE_RESET_CHILD_OVERRIDE;
|
||
|
+ }
|
||
|
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_CHANGED| ZEND_INHERITANCE_SET_CHILD_PROTO |
|
||
|
- ZEND_INHERITANCE_RESET_CHILD_OVERRIDE);
|
||
|
+ ce, NULL, flags);
|
||
|
}
|
||
|
}
|
||
|
/* }}} */
|