@@ -44,15 +44,7 @@ public function getHeaders()
4444 */
4545 public function getHeadersByName ($ name )
4646 {
47- $ headerNameNormalizer = new HeaderNameNormalizer ();
48- $ normalizedName = $ headerNameNormalizer ->normalizeHeaderName ($ name );
49- $ matchingHeaders = array ();
50- foreach ($ this ->headers as $ header ) {
51- if ($ header ->getNormalizedName () === $ normalizedName ) {
52- $ matchingHeaders [] = $ header ;
53- }
54- }
55- return $ matchingHeaders ;
47+ return $ this ->findHeadersByName ($ name );
5648 }
5749
5850 /**
@@ -61,14 +53,10 @@ public function getHeadersByName($name)
6153 */
6254 public function getHeaderByName ($ name )
6355 {
64- $ headerNameNormalizer = new HeaderNameNormalizer ();
65- $ normalizedName = $ headerNameNormalizer ->normalizeHeaderName ($ name );
66- foreach ($ this ->headers as $ header ) {
67- if ($ header ->getNormalizedName () === $ normalizedName ) {
68- return $ header ;
69- }
56+ if (!$ this ->hasHeaderWithName ($ name )) {
57+ return null ;
7058 }
71- return null ;
59+ return $ this -> findHeadersByName ( $ name )[ 0 ] ;
7260 }
7361
7462 /**
@@ -92,14 +80,21 @@ public function setHeaders(array $headers)
9280
9381 /**
9482 * @param Header $header
95- * @param bool $replaceExisting
9683 * @return $this
9784 */
98- public function addHeader (Header $ header, $ replaceExisting = false )
85+ public function addAdditionalHeader (Header $ header )
9986 {
100- if ($ replaceExisting ) {
101- $ this ->removeHeadersByName ($ header ->getName ());
102- }
87+ $ this ->headers [] = $ header ;
88+ return $ this ;
89+ }
90+
91+ /**
92+ * @param Header $header
93+ * @return $this
94+ */
95+ public function addHeader (Header $ header )
96+ {
97+ $ this ->removeHeadersByName ($ header ->getName ());
10398 $ this ->headers [] = $ header ;
10499 return $ this ;
105100 }
@@ -110,14 +105,7 @@ public function addHeader(Header $header, $replaceExisting = false)
110105 */
111106 public function removeHeadersByName ($ name )
112107 {
113- $ headerNameNormalizer = new HeaderNameNormalizer ();
114- $ normalizedName = $ headerNameNormalizer ->normalizeHeaderName ($ name );
115- $ remainingHeaders = array ();
116- foreach ($ this ->headers as $ header ) {
117- if ($ header ->getNormalizedName () !== $ normalizedName ) {
118- $ remainingHeaders [] = $ header ;
119- }
120- }
108+ $ this ->headers = $ this ->findHeadersExcludedByName ($ name );
121109 return $ this ;
122110 }
123111
@@ -127,12 +115,11 @@ public function removeHeadersByName($name)
127115 */
128116 public function removeHeader (Header $ header )
129117 {
130- for ($ i = 0 ; $ i < count ($ this ->headers ); $ i ++) {
131- if ($ header == $ this ->headers [$ i ]) {
132- unset($ this ->headers [$ i ]);
133- return $ this ;
134- }
118+ if (!$ this ->hasHeader ($ header )) {
119+ return $ this ;
135120 }
121+ $ headerIndex = $ this ->findHeaderIndex ($ header );
122+ unset($ this ->headers [$ headerIndex ]);
136123 return $ this ;
137124 }
138125
@@ -142,14 +129,7 @@ public function removeHeader(Header $header)
142129 */
143130 public function hasHeaderWithName ($ name )
144131 {
145- $ headerNameNormalizer = new HeaderNameNormalizer ();
146- $ normalizedName = $ headerNameNormalizer ->normalizeHeaderName ($ name );
147- foreach ($ this ->headers as $ header ) {
148- if ($ header ->getNormalizedName () !== $ normalizedName ) {
149- return true ;
150- }
151- }
152- return false ;
132+ return count ($ this ->findHeadersByName ($ name )) > 0 ;
153133 }
154134
155135 /**
@@ -158,12 +138,7 @@ public function hasHeaderWithName($name)
158138 */
159139 public function hasHeader (Header $ header )
160140 {
161- foreach ($ this ->headers as $ existingHeader ) {
162- if ($ existingHeader == $ header ) {
163- return true ;
164- }
165- }
166- return false ;
141+ return !is_null ($ this ->findHeaderIndex ($ header ));
167142 }
168143
169144 /**
@@ -342,4 +317,52 @@ public function removeBody()
342317 return $ this ;
343318 }
344319
320+ /**
321+ * @param string $name
322+ * @return Header[]
323+ */
324+ private function findHeadersByName ($ name )
325+ {
326+ $ headerNameNormalizer = new HeaderNameNormalizer ();
327+ $ normalizedName = $ headerNameNormalizer ->normalizeHeaderName ($ name );
328+ $ matchingHeaders = array ();
329+ foreach ($ this ->headers as $ header ) {
330+ if ($ header ->getNormalizedName () === $ normalizedName ) {
331+ $ matchingHeaders [] = $ header ;
332+ }
333+ }
334+ return $ matchingHeaders ;
335+ }
336+
337+ /**
338+ * @param Header $header
339+ * @return int
340+ */
341+ private function findHeaderIndex (Header $ header )
342+ {
343+ for ($ i = 0 ; $ i < count ($ this ->headers ); $ i ++) {
344+ if ($ this ->headers [$ i ] === $ header ) {
345+ return $ i ;
346+ }
347+ }
348+ return null ;
349+ }
350+
351+ /**
352+ * @param string $name
353+ * @return Header[]
354+ */
355+ private function findHeadersExcludedByName ($ name )
356+ {
357+ $ headerNameNormalizer = new HeaderNameNormalizer ();
358+ $ normalizedName = $ headerNameNormalizer ->normalizeHeaderName ($ name );
359+ $ matchingHeaders = array ();
360+ foreach ($ this ->headers as $ header ) {
361+ if ($ header ->getNormalizedName () !== $ normalizedName ) {
362+ $ matchingHeaders [] = $ header ;
363+ }
364+ }
365+ return $ matchingHeaders ;
366+ }
367+
345368}
0 commit comments