File tree Expand file tree Collapse file tree 3 files changed +26
-7
lines changed
tests/PHPStan/Analyser/nsrt Expand file tree Collapse file tree 3 files changed +26
-7
lines changed Original file line number Diff line number Diff line change @@ -31,12 +31,12 @@ class DOMNode
3131{
3232
3333 /**
34- * @var DOMNamedNodeMap|null
34+ * @var DOMNamedNodeMap<DOMAttr> |null
3535 */
3636 public $attributes;
3737
3838 /**
39- * @phpstan-assert-if-true =DOMNamedNodeMap $this->attributes
39+ * @phpstan-assert-if-true =DOMNamedNodeMap<DOMAttr> $this->attributes
4040 * @return bool
4141 */
4242 public function hasAttributes() {}
@@ -46,7 +46,7 @@ class DOMNode
4646class DOMElement extends DOMNode
4747{
4848
49- /** @var DOMNamedNodeMap */
49+ /** @var DOMNamedNodeMap<DOMAttr> */
5050 public $attributes;
5151
5252 /** @var DOMDocument */
@@ -155,6 +155,10 @@ class DOMProcessingInstruction
155155}
156156
157157/**
158+ * @template-covariant TNode as DOMNode
159+ * @implements Traversable<int, TNode>
160+ * @implements IteratorAggregate<int, TNode>
161+ *
158162 * @property-read int $length
159163 */
160164class DOMNamedNodeMap
Original file line number Diff line number Diff line change @@ -9,18 +9,18 @@ class Foo
99 public function test (\DOMNode $ node ): void
1010 {
1111 if ($ node ->hasAttributes ()) {
12- assertType ('DOMNamedNodeMap ' , $ node ->attributes );
12+ assertType ('DOMNamedNodeMap<DOMAttr> ' , $ node ->attributes );
1313 } else {
14- assertType ('DOMNamedNodeMap|null ' , $ node ->attributes );
14+ assertType ('DOMNamedNodeMap<DOMAttr> |null ' , $ node ->attributes );
1515 }
1616 }
1717
1818 public function testElement (\DOMElement $ node ): void
1919 {
2020 if ($ node ->hasAttributes ()) {
21- assertType ('DOMNamedNodeMap ' , $ node ->attributes );
21+ assertType ('DOMNamedNodeMap<DOMAttr> ' , $ node ->attributes );
2222 } else {
23- assertType ('DOMNamedNodeMap ' , $ node ->attributes );
23+ assertType ('DOMNamedNodeMap<DOMAttr> ' , $ node ->attributes );
2424 }
2525 }
2626}
Original file line number Diff line number Diff line change 1+ <?php declare (strict_types = 1 );
2+
3+ namespace Bug13365 ;
4+
5+ use function PHPStan \Testing \assertType ;
6+
7+ class Foo
8+ {
9+ public function test (\DOMElement $ element ): void
10+ {
11+ foreach ($ element ->attributes ?? [] as $ attr ) {
12+ assertType ('DOMAttr ' , $ attr );
13+ }
14+ }
15+ }
You can’t perform that action at this time.
0 commit comments