Passed
Branch master (72025d)
by
unknown
02:41
created

src/URL.php (1 issue)

Check that @param annotations have the correct type.

Documentation Informational

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 *
4
 * @filesource   URL.php
5
 * @created      18.02.2016
6
 * @package      chillerlan\TinyCurl
7
 * @author       Smiley <[email protected]>
8
 * @copyright    2016 Smiley
9
 * @license      MIT
10
 */
11
12
namespace chillerlan\TinyCurl;
13
14
/**
15
 * Class URL
16
 *
17
 * @property string url
18
 * @property string method
19
 * @property string scheme
20
 * @property string host
21
 * @property string port
22
 * @property string path
23
 * @property string query
24
 * @property string fragment
25
 * @property array  params
26
 * @property array  parsedquery
27
 * @property array  body
28
 */
29
class URL{
30
31
	/**
32
	 * @var string
33
	 */
34
	protected $url;
35
36
	/**
37
	 * @var string
38
	 */
39
	protected $method;
40
41
	/**
42
	 * @var string
43
	 */
44
	protected $scheme;
45
46
	/**
47
	 * @var string
48
	 */
49
	protected $host;
50
51
	/**
52
	 * @var int
53
	 */
54
	protected $port;
55
56
	/**
57
	 * @var string
58
	 */
59
	protected $path;
60
61
	/**
62
	 * @var string
63
	 */
64
	protected $query;
65
66
	/**
67
	 * @var string
68
	 */
69
	protected $fragment;
70
71
	/**
72
	 * @var array
73
	 */
74
	protected $parsedquery = [];
75
76
	/**
77
	 * @var array
78
	 */
79
	protected $params = [];
80
81
	/**
82
	 * @var array
83
	 */
84
	protected $body = [];
85
86
	/**
87
	 * URL constructor.
88
	 *
89
	 * @param string $url
90
	 * @param array  $params
91
	 * @param string $method
92
	 * @param array  $body
0 ignored issues
show
Should the type for parameter $body not be array|null? Also, consider making the array more specific, something like array<String>, or String[].

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive. In addition it looks for parameters that have the generic type array and suggests a stricter type like array<String>.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
93
	 */
94
	public function __construct($url, array $params = [], $method = 'GET', $body = null){
95
		$this->url    = $url;
96
		$this->params = $params;
97
		$this->body   = $body;
98
99
		$method = strtoupper($method);
100
		if(in_array($method, ['GET', 'POST'], true)){ // @todo
101
			$this->method = $method;
102
		}
103
104
		$this->parseUrl();
105
	}
106
107
	/**
108
	 * @param $name
109
	 *
110
	 * @return mixed
111
	 */
112
	public function __get($name){
113
		return $this->{$name};
114
	}
115
116
	/**
117
	 * @return string URL with merged params
118
	 */
119
	public function __toString(){
120
		return $this->mergeParams();
121
	}
122
123
	/**
124
	 * @return string
125
	 */
126
	public function originalParams(){
127
		return $this->getURL().'?'.http_build_query($this->parsedquery);
128
	}
129
130
	/**
131
	 * @return string
132
	 */
133
	public function overrideParams(){
134
		return $this->getURL().'?'.http_build_query($this->params);
135
	}
136
137
	/**
138
	 * @return string
139
	 */
140
	public function mergeParams(){
141
		return $this->getURL().'?'.http_build_query(array_merge($this->parsedquery, $this->params));
142
	}
143
144
	/**
145
	 * @return void
146
	 */
147
	protected function parseUrl(){
148
		$url = parse_url($this->url);
149
150
		$this->host      = !isset($url['host'])      ? null : $url['host'];
151
		$this->port      = !isset($url['port'])      ? null : $url['port'];
152
		$this->path      = !isset($url['path'])      ? null : $url['path'];
153
		$this->scheme    = !isset($url['scheme'])    ? null : $url['scheme'];
154
		$this->query     = !isset($url['query'])     ? null : $url['query'];
155
		$this->fragment  = !isset($url['fragment'])  ? null : $url['fragment'];
156
157
		if($this->query){
158
			parse_str($this->query, $this->parsedquery);
159
		}
160
161
	}
162
163
	/**
164
	 * @return string
165
	 */
166
	protected function getURL(){
167
		$url = '';
168
169
		if($this->scheme){
170
			$url .= $this->scheme.':';
171
		}
172
173
		if($this->host){
174
			$url .= '//'.$this->host;
175
176
			if($this->port){
177
				$url .= ':'.$this->port;
178
			}
179
180
		}
181
182
		if($this->path){
183
			$url .= $this->path;
184
		}
185
186
		return $url;
187
	}
188
189
}
190