@@ -31,9 +31,12 @@ class DOMNode
31
31
{
32
32
/**
33
33
* @readonly
34
- * @var DOMNamedNodeMap<DOMAttr>|null
34
+ * @var DOMNamedNodeMap<DOMAttr<string> >|null
35
35
*/
36
36
public $attributes;
37
+
38
+ /** @phpstan-assert-if-true !null $this->attributes */
39
+ public function hasAttributes(): bool
37
40
}
38
41
39
42
class DOMElement extends DOMNode
@@ -42,6 +45,13 @@ class DOMElement extends DOMNode
42
45
/** @var DOMDocument */
43
46
public $ownerDocument;
44
47
48
+ /**
49
+ * @readonly
50
+ * @inherited
51
+ * @var DOMNamedNodeMap<DOMAttr<string>>|null
52
+ */
53
+ public $attributes;
54
+
45
55
/**
46
56
* @param string $name
47
57
* @return DOMNodeList<DOMElement>
@@ -55,6 +65,23 @@ class DOMElement extends DOMNode
55
65
*/
56
66
public function getElementsByTagNameNS ($namespaceURI, $localName) {}
57
67
68
+ /**
69
+ * @template T of string
70
+ * @param T $qualifiedName
71
+ * @return bool
72
+ * @phpstan-assert-if-true (T is 'xml:id' ? DOMNameSpaceNode : DOMAttr<T>) $this->hasAttribute($qualifiedName)
73
+ * @phpstan-assert-if-true DOMNameSpaceNode<DOMAttr<T>|DOMAttr<string>> $this->$attributes
74
+ */
75
+ public function hasAttribute(string $qualifiedName): bool
76
+
77
+ public function hasAttributeNS(?string $namespace, string $localName): bool
78
+
79
+ /**
80
+ * @template T of string
81
+ * @param T $qualifiedName
82
+ * @return (T is 'xml:id' ? DOMNameSpaceNode|false : DOMAttr|false)
83
+ */
84
+ public function getAttributeNode(string $qualifiedName): DOMAttr<T>|DOMNameSpaceNode|false
58
85
}
59
86
60
87
/**
@@ -86,12 +113,20 @@ class DOMXPath
86
113
87
114
}
88
115
116
+ /**
117
+ * @template Name as string
118
+ */
89
119
class DOMAttr extends DOMNode
90
120
{
91
-
92
121
/** @var DOMDocument */
93
122
public $ownerDocument;
94
123
124
+ /**
125
+ * @var Name
126
+ * @readonly
127
+ */
128
+ public $name;
129
+
95
130
}
96
131
97
132
class DOMCharacterData extends DOMNode
0 commit comments