File tree Expand file tree Collapse file tree 3 files changed +54
-0
lines changed Expand file tree Collapse file tree 3 files changed +54
-0
lines changed Original file line number Diff line number Diff line change @@ -168,6 +168,14 @@ $class = (new Nette\PhpGenerator\ClassType('Demo'))
168
168
->addMember($const);
169
169
```
170
170
171
+ You can clone existing methods, properties and constants with a different name using ` cloneWithName() ` :
172
+
173
+ ``` php
174
+ $methodCount = $class->getMethod('count');
175
+ $methodRecount = $methodCount->cloneWithName('recount');
176
+ $class->addMember($methodRecount);
177
+ ```
178
+
171
179
Tabs versus spaces
172
180
------------------
173
181
Original file line number Diff line number Diff line change @@ -34,4 +34,19 @@ public function getName(): string
34
34
{
35
35
return $ this ->name ;
36
36
}
37
+
38
+
39
+ /**
40
+ * Returns clone with a different name.
41
+ * @return static
42
+ */
43
+ public function cloneWithName (string $ name ): self
44
+ {
45
+ if (!Nette \PhpGenerator \Helpers::isIdentifier ($ name )) {
46
+ throw new Nette \InvalidArgumentException ("Value ' $ name' is not valid name. " );
47
+ }
48
+ $ dolly = clone $ this ;
49
+ $ dolly ->name = $ name ;
50
+ return $ dolly ;
51
+ }
37
52
}
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ use Nette \PhpGenerator \ClassType ;
6
+ use Tester \Assert ;
7
+
8
+
9
+ require __DIR__ . '/../bootstrap.php ' ;
10
+
11
+
12
+ $ class = (new ClassType ('Example ' ))
13
+ ->addMember ($ method = new Nette \PhpGenerator \Method ('first ' ))
14
+ ->addMember ($ property = new Nette \PhpGenerator \Property ('first ' ))
15
+ ->addMember ($ const = new Nette \PhpGenerator \Constant ('FIRST ' ))
16
+ ->addMember ($ newMethod = $ method ->cloneWithName ('second ' ))
17
+ ->addMember ($ newProperty = $ property ->cloneWithName ('second ' ))
18
+ ->addMember ($ newConst = $ const ->cloneWithName ('SECOND ' ));
19
+
20
+ Assert::same ('first ' , $ method ->getName ());
21
+ Assert::same ('second ' , $ newMethod ->getName ());
22
+ Assert::same ('first ' , $ property ->getName ());
23
+ Assert::same ('second ' , $ newProperty ->getName ());
24
+ Assert::same ('FIRST ' , $ const ->getName ());
25
+ Assert::same ('SECOND ' , $ newConst ->getName ());
26
+
27
+
28
+ Assert::exception (function () {
29
+ $ method = new Nette \PhpGenerator \Method ('first ' );
30
+ $ method ->cloneWithName ('' );
31
+ }, Nette \InvalidArgumentException::class);
You can’t perform that action at this time.
0 commit comments