Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace PhpParser\Builder;
|
Chris@0
|
4
|
Chris@0
|
5 use PhpParser\BuilderAbstract;
|
Chris@0
|
6 use PhpParser\Node;
|
Chris@0
|
7 use PhpParser\Node\Stmt;
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * @method $this as(string $alias) Sets alias for used name.
|
Chris@0
|
11 */
|
Chris@0
|
12 class Use_ extends BuilderAbstract {
|
Chris@0
|
13 protected $name;
|
Chris@0
|
14 protected $type;
|
Chris@0
|
15 protected $alias = null;
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * Creates a name use (alias) builder.
|
Chris@0
|
19 *
|
Chris@0
|
20 * @param Node\Name|string $name Name of the entity (namespace, class, function, constant) to alias
|
Chris@0
|
21 * @param int $type One of the Stmt\Use_::TYPE_* constants
|
Chris@0
|
22 */
|
Chris@0
|
23 public function __construct($name, $type) {
|
Chris@0
|
24 $this->name = $this->normalizeName($name);
|
Chris@0
|
25 $this->type = $type;
|
Chris@0
|
26 }
|
Chris@0
|
27
|
Chris@0
|
28 /**
|
Chris@0
|
29 * Sets alias for used name.
|
Chris@0
|
30 *
|
Chris@0
|
31 * @param string $alias Alias to use (last component of full name by default)
|
Chris@0
|
32 *
|
Chris@0
|
33 * @return $this The builder instance (for fluid interface)
|
Chris@0
|
34 */
|
Chris@0
|
35 protected function as_($alias) {
|
Chris@0
|
36 $this->alias = $alias;
|
Chris@0
|
37 return $this;
|
Chris@0
|
38 }
|
Chris@0
|
39 public function __call($name, $args) {
|
Chris@0
|
40 if (method_exists($this, $name . '_')) {
|
Chris@0
|
41 return call_user_func_array(array($this, $name . '_'), $args);
|
Chris@0
|
42 }
|
Chris@0
|
43
|
Chris@0
|
44 throw new \LogicException(sprintf('Method "%s" does not exist', $name));
|
Chris@0
|
45 }
|
Chris@0
|
46
|
Chris@0
|
47 /**
|
Chris@0
|
48 * Returns the built node.
|
Chris@0
|
49 *
|
Chris@0
|
50 * @return Node The built node
|
Chris@0
|
51 */
|
Chris@0
|
52 public function getNode() {
|
Chris@0
|
53 $alias = null !== $this->alias ? $this->alias : $this->name->getLast();
|
Chris@0
|
54 return new Stmt\Use_(array(
|
Chris@0
|
55 new Stmt\UseUse($this->name, $alias)
|
Chris@0
|
56 ), $this->type);
|
Chris@0
|
57 }
|
Chris@0
|
58 }
|