1
|
|
|
<?php declare(strict_types=1); |
2
|
|
|
//[PHPCOMPRESSOR(remove,start)] |
3
|
|
|
namespace samsonphp\generator; |
4
|
|
|
|
5
|
|
|
/** |
6
|
|
|
* PHP code generator. |
7
|
|
|
* @deprecated Use other separate generators. |
8
|
|
|
* @author Vitaly Egorov <[email protected]> |
9
|
|
|
*/ |
10
|
|
|
class Generator |
11
|
|
|
{ |
12
|
|
|
/** Single quote for string value **/ |
13
|
|
|
const QUOTE_SINGLE = "'"; |
14
|
|
|
|
15
|
|
|
/** Double quote for string value **/ |
16
|
|
|
const QUOTE_DOUBLE = '"'; |
17
|
|
|
|
18
|
|
|
/** No quote for string heredoc value **/ |
19
|
|
|
const QUOTE_NO = ''; |
20
|
|
|
|
21
|
|
|
|
22
|
|
|
/** @var string Generated code */ |
23
|
|
|
public $code = ''; |
24
|
|
|
|
25
|
|
|
/** @var integer Level of code line tabbing for new lines */ |
26
|
|
|
public $tabs = 0; |
27
|
|
|
|
28
|
|
|
/** @var string Current class name */ |
29
|
|
|
public $class; |
30
|
|
|
|
31
|
|
|
/** @var int Current conditions nesting level */ |
32
|
|
|
public $ifConditionLevel = 0; |
33
|
|
|
|
34
|
|
|
/** |
35
|
|
|
* Constructor |
36
|
|
|
* |
37
|
|
|
* @param string $namespace Code namespace |
38
|
|
|
* |
39
|
|
|
* @deprecated Use new generators logic |
40
|
|
|
*/ |
41
|
|
|
public function __construct($namespace = null) |
42
|
|
|
{ |
43
|
|
|
// If namespace is defined - set it |
44
|
|
|
if (isset($namespace)) { |
45
|
|
|
$this->defNamespace($namespace); |
|
|
|
|
46
|
|
|
} |
47
|
|
|
} |
48
|
|
|
|
49
|
|
|
/** |
50
|
|
|
* Add namespace declaration. |
51
|
|
|
* |
52
|
|
|
* @param string $name Namespace name |
53
|
|
|
* |
54
|
|
|
* @deprecated Use new generators logic |
55
|
|
|
* @return $this Chaining |
56
|
|
|
*/ |
57
|
|
|
public function defNamespace($name) |
58
|
|
|
{ |
59
|
|
|
if ($name !== '' && $name !== null) { |
60
|
|
|
$this->newLine('namespace ' . $name . ';')->newLine(); |
|
|
|
|
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
return $this; |
64
|
|
|
} |
65
|
|
|
|
66
|
|
|
/** |
67
|
|
|
* Add new line to code. |
68
|
|
|
* |
69
|
|
|
* @param string $text Code to add to new line |
70
|
|
|
* @param integer $tabs Tabs count |
71
|
|
|
* |
72
|
|
|
*@return self |
73
|
|
|
* @deprecated Use new generators logic |
74
|
|
|
*/ |
75
|
|
|
public function newLine($text = '', $tabs = null) |
76
|
|
|
{ |
77
|
|
|
// If no tabs count is specified set default tabs |
78
|
|
|
if (!isset($tabs)) { |
79
|
|
|
$tabs = $this->tabs; |
80
|
|
|
} |
81
|
|
|
|
82
|
|
|
return $this->tabs($text, $tabs, "\n"); |
|
|
|
|
83
|
|
|
} |
84
|
|
|
|
85
|
|
|
/** |
86
|
|
|
* Add current tabbing level to current line. |
87
|
|
|
* |
88
|
|
|
* @param string $endText Text to add after tabs |
89
|
|
|
* @param integer $tabs Amount of tabs to add |
90
|
|
|
* @param string $startText Text to add before tabs |
91
|
|
|
* |
92
|
|
|
* @return Generator Chaining |
93
|
|
|
* @deprecated Use new generators logic |
94
|
|
|
*/ |
95
|
|
|
public function tabs($endText = '', $tabs = null, $startText = '') |
96
|
|
|
{ |
97
|
|
|
// Generate tabs array |
98
|
|
|
$tabs = isset($tabs) && $tabs > 0 ? array_fill(0, $tabs, "\t") : array(); |
99
|
|
|
|
100
|
|
|
// Add necessary amount of tabs to line and append text |
101
|
|
|
$this->text($startText . implode('', $tabs) . $endText); |
|
|
|
|
102
|
|
|
|
103
|
|
|
return $this; |
104
|
|
|
} |
105
|
|
|
|
106
|
|
|
/** |
107
|
|
|
* Add simple text to current code position |
108
|
|
|
* |
109
|
|
|
* @param string $text Text to add |
110
|
|
|
* |
111
|
|
|
* @return self |
112
|
|
|
* @deprecated Use new generators logic |
113
|
|
|
*/ |
114
|
|
|
public function text($text = '') |
115
|
|
|
{ |
116
|
|
|
$this->code .= $text; |
117
|
|
|
|
118
|
|
|
return $this; |
119
|
|
|
} |
120
|
|
|
|
121
|
|
|
/** |
122
|
|
|
* Increase current code indentation. |
123
|
|
|
* |
124
|
|
|
* @param int $amount Indentation amount |
125
|
|
|
* |
126
|
|
|
* @deprecated Use new generators logic |
127
|
|
|
* |
128
|
|
|
* @return $this Chaining |
129
|
|
|
*/ |
130
|
|
|
public function increaseIndentation($amount = 1) |
131
|
|
|
{ |
132
|
|
|
$this->tabs += $amount; |
133
|
|
|
|
134
|
|
|
return $this; |
135
|
|
|
} |
136
|
|
|
|
137
|
|
|
/** |
138
|
|
|
* Reduce current code indentation. |
139
|
|
|
* |
140
|
|
|
* @param int $amount Indentation amount |
141
|
|
|
* |
142
|
|
|
* @deprecated Use new generators logic |
143
|
|
|
* |
144
|
|
|
* @return $this Chaining |
145
|
|
|
*/ |
146
|
|
|
public function decreaseIndentation($amount = 1) |
147
|
|
|
{ |
148
|
|
|
$this->tabs = $this->tabs > $amount ? $this->tabs - $amount : 0; |
149
|
|
|
|
150
|
|
|
return $this; |
151
|
|
|
} |
152
|
|
|
|
153
|
|
|
/** |
154
|
|
|
* Add single line comment to code |
155
|
|
|
* |
156
|
|
|
* @param string $text Comment text |
157
|
|
|
* |
158
|
|
|
* @return self Chaining |
159
|
|
|
* @deprecated Use new generators logic |
160
|
|
|
*/ |
161
|
|
|
public function comment($text = '') |
162
|
|
|
{ |
163
|
|
|
return isset($text{0}) ? $this->newLine("// " . $text) : $this; |
|
|
|
|
164
|
|
|
} |
165
|
|
|
|
166
|
|
|
/** |
167
|
|
|
* Add one line variable definition comment. |
168
|
|
|
* |
169
|
|
|
* @param string $type Variable typeHint |
170
|
|
|
* @param string $description Variable description |
171
|
|
|
* @param string $name Variable name |
172
|
|
|
* |
173
|
|
|
*@return self Chaining |
174
|
|
|
* @deprecated Use new generators logic |
175
|
|
|
*/ |
176
|
|
|
public function commentVar($type, $description, $name = '') |
177
|
|
|
{ |
178
|
|
|
return $this->multiComment(array( |
|
|
|
|
179
|
|
|
'@var ' . trim($type) . (isset($name) ? trim($name) . ' ' : ' ') . trim($description) |
180
|
|
|
)); |
181
|
|
|
} |
182
|
|
|
|
183
|
|
|
/** |
184
|
|
|
* Add multi-line comment. If array with one line is passed |
185
|
|
|
* we create special syntax comment in one line, usually |
186
|
|
|
* used for class variable definition in more compact form. |
187
|
|
|
* |
188
|
|
|
* @param array $lines Array of comments lines |
189
|
|
|
* |
190
|
|
|
* @deprecated Use new generators logic |
191
|
|
|
* @return self Chaining |
192
|
|
|
*/ |
193
|
|
|
public function multiComment(array $lines = array()) |
194
|
|
|
{ |
195
|
|
|
// If array is not empty |
196
|
|
|
if (sizeof($lines)) { |
197
|
|
|
$this->newLine("/**"); |
|
|
|
|
198
|
|
|
|
199
|
|
|
// Multi-comment with single line |
200
|
|
|
if (sizeof($lines) === 1) { |
201
|
|
|
$this->text(' ' . $lines[0] . ' */'); |
|
|
|
|
202
|
|
|
} else { // Iterate comments lines and if comment line is not empty |
203
|
|
|
foreach ($lines as $line) { |
204
|
|
|
if (isset($line{0})) { |
205
|
|
|
$this->newLine(" * " . $line); |
|
|
|
|
206
|
|
|
} |
207
|
|
|
} |
208
|
|
|
|
209
|
|
|
return $this->newLine(" */"); |
|
|
|
|
210
|
|
|
} |
211
|
|
|
|
|
|
|
|
212
|
|
|
} |
213
|
|
|
|
214
|
|
|
return $this; |
215
|
|
|
} |
216
|
|
|
|
217
|
|
|
/** |
218
|
|
|
* Add variable definition with array merging. |
219
|
|
|
* |
220
|
|
|
* @param string $name Variable name |
221
|
|
|
* @param array $value Array of key-value items for merging it to other array |
222
|
|
|
* @param string $arrayName Name of array to merge to, if no is specified - $name is used |
223
|
|
|
* |
224
|
|
|
*@return self Chaining |
225
|
|
|
* @deprecated Use new generators logic |
226
|
|
|
*/ |
227
|
|
|
public function defArrayMerge($name, array $value, $arrayName = null) |
228
|
|
|
{ |
229
|
|
|
// If no other array is specified - set it to current |
230
|
|
|
if (!isset($arrayName)) { |
231
|
|
|
$arrayName = $name; |
232
|
|
|
} |
233
|
|
|
|
234
|
|
|
return $this->defvar($name, $value, ' = array_merge( ' . $arrayName . ', ', '')->text(');'); |
|
|
|
|
235
|
|
|
} |
236
|
|
|
|
237
|
|
|
/** |
238
|
|
|
* Add variable definition. |
239
|
|
|
* |
240
|
|
|
* @param string $name Variable name |
241
|
|
|
* @param mixed $value Variable default value |
242
|
|
|
* @param string $after String to insert after variable definition |
243
|
|
|
* @param string $end Closing part of variable definition |
244
|
|
|
* @param string $quote Type of quote |
245
|
|
|
* |
246
|
|
|
*@return Generator Chaining |
247
|
|
|
* @deprecated Use new generators logic |
248
|
|
|
*/ |
249
|
|
|
public function defVar($name, $value = null, $after = ' = ', $end = ';', $quote = self::QUOTE_SINGLE) |
250
|
|
|
{ |
251
|
|
|
// Output variable definition |
252
|
|
|
$this->newLine($name); |
|
|
|
|
253
|
|
|
|
254
|
|
|
// Get variable typeHint |
255
|
|
|
switch (gettype($value)) { |
256
|
|
|
case 'integer': |
257
|
|
|
case 'boolean': |
258
|
|
|
case 'double': |
259
|
|
|
$this->text($after)->text($value)->text($end); |
|
|
|
|
260
|
|
|
break; |
261
|
|
|
case 'string': |
262
|
|
|
if (strpos($value, 'EOT') !== false) { |
263
|
|
|
$this->text($after)->stringValue($value, 0, self::QUOTE_NO)->text($end); |
|
|
|
|
264
|
|
|
} else { |
265
|
|
|
$this->text($after)->stringValue($value, 0, $quote)->text($end); |
|
|
|
|
266
|
|
|
} |
267
|
|
|
break; |
268
|
|
|
case 'array': |
269
|
|
|
$this->text($after)->arrayValue($value)->text($end); |
|
|
|
|
270
|
|
|
break; |
271
|
|
|
case 'NULL': |
272
|
|
|
case 'object': |
273
|
|
|
case 'resource': |
274
|
|
|
default: |
275
|
|
|
$this->text(';'); |
|
|
|
|
276
|
|
|
} |
277
|
|
|
|
278
|
|
|
return $this; |
279
|
|
|
} |
280
|
|
|
|
281
|
|
|
/** |
282
|
|
|
* Add string value definition. |
283
|
|
|
* |
284
|
|
|
* @param string $value String value to add |
285
|
|
|
* @param string $tabs Tabs count |
286
|
|
|
* @param string $quote Type of quote |
287
|
|
|
* |
288
|
|
|
* @deprecated Use new generators logic |
289
|
|
|
* @return self Chaining |
290
|
|
|
*/ |
291
|
|
|
public function stringValue($value, $tabs = null, $quote = self::QUOTE_SINGLE) |
292
|
|
|
{ |
293
|
|
|
return $this->tabs($quote . $value . $quote, $tabs); |
|
|
|
|
294
|
|
|
} |
295
|
|
|
|
296
|
|
|
/** |
297
|
|
|
* Add array values definition. |
298
|
|
|
* |
299
|
|
|
* @param array $items Array key-value pairs collection |
300
|
|
|
* |
301
|
|
|
* @deprecated Use new generators logic |
302
|
|
|
* @return self Chaining |
303
|
|
|
*/ |
304
|
|
|
public function arrayValue(array $items = array()) |
305
|
|
|
{ |
306
|
|
|
if (sizeof($items)) { |
307
|
|
|
$this->text('['); |
|
|
|
|
308
|
|
|
$this->tabs++; |
309
|
|
|
|
310
|
|
|
// Iterate array items |
311
|
|
|
foreach ($items as $key => $value) { |
312
|
|
|
// Start array key definition |
313
|
|
|
$this->newLine()->defineValue($key)->text(' => ')->defineValue($value)->text(','); |
|
|
|
|
314
|
|
|
} |
315
|
|
|
|
316
|
|
|
$this->tabs--; |
317
|
|
|
$this->newLine(']'); |
|
|
|
|
318
|
|
|
} else { |
319
|
|
|
$this->text('[]'); |
|
|
|
|
320
|
|
|
} |
321
|
|
|
|
322
|
|
|
return $this; |
323
|
|
|
} |
324
|
|
|
|
325
|
|
|
/** |
326
|
|
|
* Generate correct value. |
327
|
|
|
* |
328
|
|
|
* Metho handles arrays, numerics, strings and constants. |
329
|
|
|
* |
330
|
|
|
* @param mixed $value Value to put in generated code |
331
|
|
|
* |
332
|
|
|
* @deprecated Use new generators logic |
333
|
|
|
* @return $this |
334
|
|
|
*/ |
335
|
|
|
protected function defineValue($value) |
336
|
|
|
{ |
337
|
|
|
// If item value is array - recursion |
338
|
|
|
if (is_array($value)) { |
339
|
|
|
$this->arrayValue($value); |
|
|
|
|
340
|
|
|
} elseif (is_numeric($value) || is_float($value)) { |
341
|
|
|
$this->text($value); |
|
|
|
|
342
|
|
|
} else { |
343
|
|
|
try { // Try to evaluate |
344
|
|
|
eval('$value2 = ' . $value . ';'); |
345
|
|
|
$this->text($value); |
|
|
|
|
346
|
|
|
} catch (\Throwable $e) { // Consider it as a string |
|
|
|
|
347
|
|
|
$this->stringValue($value); |
|
|
|
|
348
|
|
|
} |
349
|
|
|
} |
350
|
|
|
|
351
|
|
|
return $this; |
352
|
|
|
} |
353
|
|
|
|
354
|
|
|
/** |
355
|
|
|
* Add trait definition. |
356
|
|
|
* |
357
|
|
|
* @param string $name Trait name |
358
|
|
|
* |
359
|
|
|
* @return self Chaining |
360
|
|
|
* @deprecated Use new generators logic |
361
|
|
|
*/ |
362
|
|
|
public function defTrait($name) |
363
|
|
|
{ |
364
|
|
|
// If we define another class, and we were in other class context |
365
|
|
|
if (isset($this->class) && ($name !== $this->class)) { |
366
|
|
|
// Close old class context |
367
|
|
|
$this->endClass(); |
|
|
|
|
368
|
|
|
} |
369
|
|
|
|
370
|
|
|
// Save new class name |
371
|
|
|
$this->class = $name; |
372
|
|
|
|
373
|
|
|
// Class definition start |
374
|
|
|
$this->newLine('trait ' . $name); |
|
|
|
|
375
|
|
|
|
376
|
|
|
$this->newLine('{'); |
|
|
|
|
377
|
|
|
|
378
|
|
|
$this->tabs++; |
379
|
|
|
|
380
|
|
|
return $this; |
381
|
|
|
} |
382
|
|
|
|
383
|
|
|
/** |
384
|
|
|
* Close current class context. |
385
|
|
|
* |
386
|
|
|
* @return self Chaining |
387
|
|
|
* @deprecated Use new generators logic |
388
|
|
|
*/ |
389
|
|
|
public function endClass() |
390
|
|
|
{ |
391
|
|
|
$this->tabs > 0 ? $this->tabs-- : null; |
392
|
|
|
|
393
|
|
|
// Close class definition |
394
|
|
|
return $this->newLine('}') |
|
|
|
|
395
|
|
|
// Add one empty line after class definition |
396
|
|
|
->newLine(''); |
397
|
|
|
} |
398
|
|
|
|
399
|
|
|
/** |
400
|
|
|
* Add class definition. |
401
|
|
|
* |
402
|
|
|
* @param string $name Class name |
403
|
|
|
* @param string $extends Parent class name |
404
|
|
|
* @param array $implements Interfaces names collection |
405
|
|
|
* |
406
|
|
|
* @return self Chaining |
407
|
|
|
* @deprecated Use new generators logic |
408
|
|
|
*/ |
409
|
|
|
public function defClass($name, $extends = null, array $implements = array()) |
410
|
|
|
{ |
411
|
|
|
// If we define another class, and we were in other class context |
412
|
|
|
if (isset($this->class) && ($name !== $this->class)) { |
413
|
|
|
// Close old class context |
414
|
|
|
$this->endClass(); |
|
|
|
|
415
|
|
|
} |
416
|
|
|
|
417
|
|
|
// Save new class name |
418
|
|
|
$this->class = $name; |
419
|
|
|
|
420
|
|
|
// Class definition start |
421
|
|
|
$this->newLine('class ' . $name); |
|
|
|
|
422
|
|
|
|
423
|
|
|
// Parent class definition |
424
|
|
|
if (isset($extends)) { |
425
|
|
|
$this->text(' extends ' . $extends); |
|
|
|
|
426
|
|
|
} |
427
|
|
|
|
428
|
|
|
// Interfaces |
429
|
|
|
if (sizeof($implements)) { |
430
|
|
|
$this->text(' implements ' . implode(',', $implements)); |
|
|
|
|
431
|
|
|
} |
432
|
|
|
|
433
|
|
|
$this->newLine('{'); |
|
|
|
|
434
|
|
|
|
435
|
|
|
$this->tabs++; |
436
|
|
|
|
437
|
|
|
return $this; |
438
|
|
|
} |
439
|
|
|
|
440
|
|
|
/** |
441
|
|
|
* Define if statement condition. |
442
|
|
|
* |
443
|
|
|
* @param string $condition Condition statement |
444
|
|
|
* |
445
|
|
|
* @return self Chaining |
446
|
|
|
* @deprecated Use new generators logic |
447
|
|
|
*/ |
448
|
|
|
public function defIfCondition($condition) |
449
|
|
|
{ |
450
|
|
|
$this->ifConditionLevel++; |
451
|
|
|
|
452
|
|
|
// Class definition start |
453
|
|
|
$this->newLine('if (' . $condition . ') {'); |
|
|
|
|
454
|
|
|
$this->tabs++; |
455
|
|
|
return $this; |
456
|
|
|
} |
457
|
|
|
|
458
|
|
|
/** |
459
|
|
|
* Define elseif statement condition. |
460
|
|
|
* |
461
|
|
|
* @param string $condition Condition statement |
462
|
|
|
* |
463
|
|
|
* @return self Chaining |
464
|
|
|
* @deprecated Use new generators logic |
465
|
|
|
*/ |
466
|
|
|
public function defElseIfCondition($condition) |
467
|
|
|
{ |
468
|
|
|
$this->tabs--; |
469
|
|
|
// Class definition start |
470
|
|
|
$this->newLine('} elseif (' . $condition . ') {'); |
|
|
|
|
471
|
|
|
$this->tabs++; |
472
|
|
|
return $this; |
473
|
|
|
} |
474
|
|
|
|
475
|
|
|
/** |
476
|
|
|
* Define else statement. |
477
|
|
|
* |
478
|
|
|
* @return self Chaining |
479
|
|
|
* @deprecated Use new generators logic |
480
|
|
|
*/ |
481
|
|
|
public function defElseCondition() |
482
|
|
|
{ |
483
|
|
|
$this->tabs--; |
484
|
|
|
// Class definition start |
485
|
|
|
$this->newLine('} else {'); |
|
|
|
|
486
|
|
|
$this->tabs++; |
487
|
|
|
return $this; |
488
|
|
|
} |
489
|
|
|
|
490
|
|
|
/** |
491
|
|
|
* Close if condition statement. |
492
|
|
|
* |
493
|
|
|
* @return self Chaining |
494
|
|
|
* @deprecated Use new generators logic |
495
|
|
|
*/ |
496
|
|
|
public function endIfCondition() |
497
|
|
|
{ |
498
|
|
|
if ($this->ifConditionLevel--) { |
499
|
|
|
$this->tabs--; |
500
|
|
|
|
501
|
|
|
// Close class definition |
502
|
|
|
return $this->newLine('}'); |
|
|
|
|
503
|
|
|
} |
504
|
|
|
|
505
|
|
|
return $this; |
506
|
|
|
} |
507
|
|
|
|
508
|
|
|
/** |
509
|
|
|
* Add class constant definition. |
510
|
|
|
* |
511
|
|
|
* @param string $name Constant name |
512
|
|
|
* @param string $value Variable default value |
513
|
|
|
* |
514
|
|
|
* @return self Chaining |
515
|
|
|
* @deprecated Use new generators logic |
516
|
|
|
*/ |
517
|
|
|
public function defClassConst($name, $value) |
518
|
|
|
{ |
519
|
|
|
return $this->defClassVar(strtoupper($name), 'const', $value); |
|
|
|
|
520
|
|
|
} |
521
|
|
|
|
522
|
|
|
/** |
523
|
|
|
* Add class variable definition. |
524
|
|
|
* |
525
|
|
|
* @param string $name Variable name |
526
|
|
|
* @param string $visibility Variable accessibility level |
527
|
|
|
* @param mixed $value Variable default value |
528
|
|
|
* |
529
|
|
|
* @return self Chaining |
530
|
|
|
* @deprecated Use new generators logic |
531
|
|
|
*/ |
532
|
|
|
public function defClassVar($name, $visibility = 'public', $value = null) |
533
|
|
|
{ |
534
|
|
|
if (isset($comment) && isset($comment{0})) { |
|
|
|
|
535
|
|
|
$this->multiComment(array($comment)); |
|
|
|
|
536
|
|
|
} |
537
|
|
|
|
538
|
|
|
return $this->defvar($visibility . ' ' . $name, $value)->newLine(); |
|
|
|
|
539
|
|
|
} |
540
|
|
|
|
541
|
|
|
/** |
542
|
|
|
* Write file to disk |
543
|
|
|
* |
544
|
|
|
*@param string $name Path to file |
545
|
|
|
* @param string $format Output file format |
546
|
|
|
* |
547
|
|
|
*@deprecated Use new generators logic |
548
|
|
|
*/ |
549
|
|
|
public function write($name, $format = 'php') |
550
|
|
|
{ |
551
|
|
|
$code = $this->flush(); |
|
|
|
|
552
|
|
|
|
553
|
|
|
if ($format === 'php') { |
554
|
|
|
$code = '<?php ' . $code; |
555
|
|
|
} |
556
|
|
|
|
557
|
|
|
file_put_contents($name, $code, 0775); |
558
|
|
|
} |
559
|
|
|
|
560
|
|
|
/** |
561
|
|
|
* Flush internal data and return it. |
562
|
|
|
* |
563
|
|
|
* @return string Current generated code |
564
|
|
|
* @deprecated Use new generators logic |
565
|
|
|
*/ |
566
|
|
|
public function flush() |
567
|
|
|
{ |
568
|
|
|
// We should use 4 spaces instead of tabs |
569
|
|
|
$code = str_replace("\t", ' ', $this->code); |
570
|
|
|
|
571
|
|
|
$this->tabs = 0; |
572
|
|
|
$this->code = ''; |
573
|
|
|
$this->class = null; |
574
|
|
|
|
575
|
|
|
return $code; |
576
|
|
|
} |
577
|
|
|
|
578
|
|
|
/** |
579
|
|
|
* @see self::defClassFunction with public visibility |
580
|
|
|
* |
581
|
|
|
* @return $this |
582
|
|
|
* @deprecated Use new generators logic |
583
|
|
|
*/ |
584
|
|
|
public function defPublicClassFunction(string $name, array $parameters = [], array $comments = [], $returnType = null) |
585
|
|
|
{ |
586
|
|
|
return $this->defClassFunction($name, 'public', $parameters, $comments, $returnType); |
|
|
|
|
587
|
|
|
} |
588
|
|
|
|
589
|
|
|
/** |
590
|
|
|
* Add class function definition. |
591
|
|
|
* |
592
|
|
|
* @param string $name Class function name |
593
|
|
|
* @param string $visibility Class function visibility |
594
|
|
|
* @param array $parameters Class function arguments |
595
|
|
|
* @param array $comments Class function multi-line comments |
596
|
|
|
* @param null $returnType Class function return type PHP7 |
597
|
|
|
* |
598
|
|
|
* @return $this |
599
|
|
|
* @deprecated Use new generators logic |
600
|
|
|
*/ |
601
|
|
|
public function defClassFunction(string $name, string $visibility = 'public', array $parameters = [], array $comments = [], $returnType = null) |
602
|
|
|
{ |
603
|
|
|
if ($this->class === null) { |
604
|
|
|
throw new \InvalidArgumentException('Cannot create class function '.$name.' with out class creation'); |
605
|
|
|
} |
606
|
|
|
|
607
|
|
|
$this->defFunction($name, $parameters, $visibility.' ', $comments, $returnType); |
|
|
|
|
608
|
|
|
|
609
|
|
|
return $this; |
610
|
|
|
} |
611
|
|
|
|
612
|
|
|
/** |
613
|
|
|
* Add function definition. |
614
|
|
|
* |
615
|
|
|
* @param string $name Function name |
616
|
|
|
* @param array $parameters Collection of parameters $typeHint => $paramName |
617
|
|
|
* @param string $prefix Function prefix |
618
|
|
|
* @param array $comments Function multi-line comments |
619
|
|
|
* @param string $returnType Function return type PHP7 |
620
|
|
|
* |
621
|
|
|
* @return Generator Chaining |
622
|
|
|
* @deprecated Use new generators logic |
623
|
|
|
*/ |
624
|
|
|
public function defFunction(string $name, array $parameters = [], string $prefix = '', array $comments = [], string $returnType = null) |
625
|
|
|
{ |
626
|
|
|
// Convert parameters to string |
627
|
|
|
$parameterList = array(); |
628
|
|
|
foreach ($parameters as $type => $parameter) { |
629
|
|
|
$parameterList[] = (is_string($type) ? $type . ' ' : '') . $parameter; |
630
|
|
|
} |
631
|
|
|
$parameterList = sizeof($parameterList) ? implode(', ', $parameterList) : ''; |
632
|
|
|
|
633
|
|
|
$this |
|
|
|
|
634
|
|
|
->newLine('') |
635
|
|
|
->multiComment($comments) |
636
|
|
|
->newLine($prefix . 'function ' . $name . '(' . $parameterList . ')' . ($returnType !== null ? ' : ' . $returnType : '')) |
637
|
|
|
->newLine('{') |
638
|
|
|
->tabs(''); |
639
|
|
|
|
640
|
|
|
$this->tabs++; |
641
|
|
|
|
642
|
|
|
return $this; |
643
|
|
|
} |
644
|
|
|
|
645
|
|
|
/** |
646
|
|
|
* @see self::defClassFunction with private visibility |
647
|
|
|
* |
648
|
|
|
* @return $this |
649
|
|
|
* @deprecated Use new generators logic |
650
|
|
|
*/ |
651
|
|
|
public function defPrivateClassFunction(string $name, array $parameters = [], array $comments = [], $returnType = null) |
652
|
|
|
{ |
653
|
|
|
return $this->defClassFunction($name, 'private', $parameters, $comments, $returnType); |
|
|
|
|
654
|
|
|
} |
655
|
|
|
|
656
|
|
|
/** |
657
|
|
|
* @see self::defClassFunction with protected visibility |
658
|
|
|
* @deprecated Use new generators logic |
659
|
|
|
* @return $this |
660
|
|
|
*/ |
661
|
|
|
public function defProtectedClassFunction(string $name, array $parameters = [], array $comments = [], $returnType = null) |
662
|
|
|
{ |
663
|
|
|
return $this->defClassFunction($name, 'protected', $parameters, $comments, $returnType); |
|
|
|
|
664
|
|
|
} |
665
|
|
|
|
666
|
|
|
/** |
667
|
|
|
* Close class function definition. |
668
|
|
|
* @deprecated Use new generators logic |
669
|
|
|
* @return $this Chaining |
670
|
|
|
*/ |
671
|
|
|
public function endClassFunction() |
672
|
|
|
{ |
673
|
|
|
$this->endFunction(); |
|
|
|
|
674
|
|
|
|
675
|
|
|
return $this; |
676
|
|
|
} |
677
|
|
|
|
678
|
|
|
/** |
679
|
|
|
* Close current function context. |
680
|
|
|
* @deprecated Use new generators logic |
681
|
|
|
* @return self Chaining |
682
|
|
|
*/ |
683
|
|
|
public function endFunction() |
684
|
|
|
{ |
685
|
|
|
$this->tabs--; |
686
|
|
|
|
687
|
|
|
return $this->newLine('}'); |
|
|
|
|
688
|
|
|
} |
689
|
|
|
} |
690
|
|
|
//[PHPCOMPRESSOR(remove,end)] |
691
|
|
|
|
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.