1--TEST-- 2Replacing union of classes respecting intersection type by intersection type 3--FILE-- 4<?php 5 6interface X {} 7interface Y {} 8 9class TestOne implements X, Y {} 10class TestTwo implements X, Y {} 11class Foo {} 12 13interface A 14{ 15 public function foo(TestOne|TestTwo|Foo $param): (X&Y)|Foo; 16} 17 18interface B extends A 19{ 20 public function foo((X&Y)|Foo $param): TestOne|TestTwo|Foo; 21} 22 23interface C extends A 24{ 25 public function foo(X|Foo $param): TestTwo; 26} 27 28interface D extends A 29{ 30 public function foo(Y|Foo $param): TestOne; 31} 32 33interface E extends B 34{ 35 public function foo(X|Foo $param): TestTwo; 36} 37 38interface F extends B 39{ 40 public function foo(Y|Foo $param): TestOne; 41} 42 43?> 44===DONE=== 45--EXPECT-- 46===DONE=== 47