Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
ParameterGenerator.php
001 <?php
002 /**
003 * Zend Framework (http://framework.zend.com/)
004 *
005 * @link http://github.com/zendframework/zf2 for the canonical source repository
006 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
007 * @license http://framework.zend.com/license/new-bsd New BSD License
008 */
009
010 namespace Zend\Code\Generator;
011
012 use Zend\Code\Reflection\ParameterReflection;
013
014 class ParameterGenerator extends AbstractGenerator
015 {
016 /**
017 * @var string
018 */
019 protected $name = null;
020
021 /**
022 * @var string
023 */
024 protected $type = null;
025
026 /**
027 * @var string|ValueGenerator
028 */
029 protected $defaultValue = null;
030
031 /**
032 * @var int
033 */
034 protected $position = null;
035
036 /**
037 * @var bool
038 */
039 protected $passedByReference = false;
040
041 /**
042 * @var array
043 */
044 protected static $simple = array('int', 'bool', 'string', 'float', 'resource', 'mixed', 'object');
045
046 /**
047 * @param ParameterReflection $reflectionParameter
048 * @return ParameterGenerator
049 */
050 public static function fromReflection(ParameterReflection $reflectionParameter)
051 {
052 $param = new ParameterGenerator();
053 $param->setName($reflectionParameter->getName());
054
055 if ($reflectionParameter->isArray()) {
056 $param->setType('array');
057 } elseif (method_exists($reflectionParameter, 'isCallable') && $reflectionParameter->isCallable()) {
058 $param->setType('callable');
059 } else {
060 $typeClass = $reflectionParameter->getClass();
061 if ($typeClass) {
062 $parameterType = $typeClass->getName();
063 $currentNamespace = $reflectionParameter->getDeclaringClass()->getNamespaceName();
064
065 if (!empty($currentNamespace) && substr($parameterType, 0, strlen($currentNamespace)) == $currentNamespace) {
066 $parameterType = substr($parameterType, strlen($currentNamespace) + 1);
067 } else {
068 $parameterType = '\\' . trim($parameterType, '\\');
069 }
070
071 $param->setType($parameterType);
072 }
073 }
074
075 $param->setPosition($reflectionParameter->getPosition());
076
077 if ($reflectionParameter->isOptional()) {
078 $param->setDefaultValue($reflectionParameter->getDefaultValue());
079 }
080 $param->setPassedByReference($reflectionParameter->isPassedByReference());
081
082 return $param;
083 }
084
085 /**
086 * Generate from array
087 *
088 * @configkey name string [required] Class Name
089 * @configkey type string
090 * @configkey defaultvalue null|bool|string|int|float|array|ValueGenerator
091 * @configkey passedbyreference bool
092 * @configkey position int
093 * @configkey sourcedirty bool
094 * @configkey indentation string
095 * @configkey sourcecontent string
096 *
097 * @throws Exception\InvalidArgumentException
098 * @param array $array
099 * @return ParameterGenerator
100 */
101 public static function fromArray(array $array)
102 {
103 if (!isset($array['name'])) {
104 throw new Exception\InvalidArgumentException(
105 'Paramerer generator requires that a name is provided for this object'
106 );
107 }
108
109 $param = new static($array['name']);
110 foreach ($array as $name => $value) {
111 // normalize key
112 switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) {
113 case 'type':
114 $param->setType($value);
115 break;
116 case 'defaultvalue':
117 $param->setDefaultValue($value);
118 break;
119 case 'passedbyreference':
120 $param->setPassedByReference($value);
121 break;
122 case 'position':
123 $param->setPosition($value);
124 break;
125 case 'sourcedirty':
126 $param->setSourceDirty($value);
127 break;
128 case 'indentation':
129 $param->setIndentation($value);
130 break;
131 case 'sourcecontent':
132 $param->setSourceContent($value);
133 break;
134 }
135 }
136
137 return $param;
138 }
139
140 /**
141 * @param string $name
142 * @param string $type
143 * @param mixed $defaultValue
144 * @param int $position
145 * @param bool $passByReference
146 */
147 public function __construct(
148 $name = null,
149 $type = null,
150 $defaultValue = null,
151 $position = null,
152 $passByReference = false
153 ) {
154 if (null !== $name) {
155 $this->setName($name);
156 }
157 if (null !== $type) {
158 $this->setType($type);
159 }
160 if (null !== $defaultValue) {
161 $this->setDefaultValue($defaultValue);
162 }
163 if (null !== $position) {
164 $this->setPosition($position);
165 }
166 if (false !== $passByReference) {
167 $this->setPassedByReference(true);
168 }
169 }
170
171 /**
172 * @param string $type
173 * @return ParameterGenerator
174 */
175 public function setType($type)
176 {
177 $this->type = (string) $type;
178 return $this;
179 }
180
181 /**
182 * @return string
183 */
184 public function getType()
185 {
186 return $this->type;
187 }
188
189 /**
190 * @param string $name
191 * @return ParameterGenerator
192 */
193 public function setName($name)
194 {
195 $this->name = (string) $name;
196 return $this;
197 }
198
199 /**
200 * @return string
201 */
202 public function getName()
203 {
204 return $this->name;
205 }
206
207 /**
208 * Set the default value of the parameter.
209 *
210 * Certain variables are difficult to express
211 *
212 * @param null|bool|string|int|float|array|ValueGenerator $defaultValue
213 * @return ParameterGenerator
214 */
215 public function setDefaultValue($defaultValue)
216 {
217 if (!($defaultValue instanceof ValueGenerator)) {
218 $defaultValue = new ValueGenerator($defaultValue);
219 }
220 $this->defaultValue = $defaultValue;
221
222 return $this;
223 }
224
225 /**
226 * @return string
227 */
228 public function getDefaultValue()
229 {
230 return $this->defaultValue;
231 }
232
233 /**
234 * @param int $position
235 * @return ParameterGenerator
236 */
237 public function setPosition($position)
238 {
239 $this->position = (int) $position;
240 return $this;
241 }
242
243 /**
244 * @return int
245 */
246 public function getPosition()
247 {
248 return $this->position;
249 }
250
251 /**
252 * @return bool
253 */
254 public function getPassedByReference()
255 {
256 return $this->passedByReference;
257 }
258
259 /**
260 * @param bool $passedByReference
261 * @return ParameterGenerator
262 */
263 public function setPassedByReference($passedByReference)
264 {
265 $this->passedByReference = (bool) $passedByReference;
266 return $this;
267 }
268
269 /**
270 * @return string
271 */
272 public function generate()
273 {
274 $output = '';
275
276 if ($this->type && !in_array($this->type, static::$simple)) {
277 $output .= $this->type . ' ';
278 }
279
280 if (true === $this->passedByReference) {
281 $output .= '&';
282 }
283
284 $output .= '$' . $this->name;
285
286 if ($this->defaultValue !== null) {
287 $output .= ' = ';
288 if (is_string($this->defaultValue)) {
289 $output .= ValueGenerator::escape($this->defaultValue);
290 } elseif ($this->defaultValue instanceof ValueGenerator) {
291 $this->defaultValue->setOutputMode(ValueGenerator::OUTPUT_SINGLE_LINE);
292 $output .= $this->defaultValue;
293 } else {
294 $output .= $this->defaultValue;
295 }
296 }
297
298 return $output;
299 }
300 }
301