1<?php declare(strict_types=1); 2 3namespace PhpParser\Builder; 4 5use PhpParser; 6use PhpParser\BuilderHelpers; 7use PhpParser\Node; 8 9class Param implements PhpParser\Builder 10{ 11 protected $name; 12 13 protected $default = null; 14 15 /** @var Node\Identifier|Node\Name|Node\NullableType|null */ 16 protected $type = null; 17 18 protected $byRef = false; 19 20 protected $variadic = false; 21 22 /** 23 * Creates a parameter builder. 24 * 25 * @param string $name Name of the parameter 26 */ 27 public function __construct(string $name) { 28 $this->name = $name; 29 } 30 31 /** 32 * Sets default value for the parameter. 33 * 34 * @param mixed $value Default value to use 35 * 36 * @return $this The builder instance (for fluid interface) 37 */ 38 public function setDefault($value) { 39 $this->default = BuilderHelpers::normalizeValue($value); 40 41 return $this; 42 } 43 44 /** 45 * Sets type for the parameter. 46 * 47 * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type 48 * 49 * @return $this The builder instance (for fluid interface) 50 */ 51 public function setType($type) { 52 $this->type = BuilderHelpers::normalizeType($type); 53 if ($this->type == 'void') { 54 throw new \LogicException('Parameter type cannot be void'); 55 } 56 57 return $this; 58 } 59 60 /** 61 * Sets type for the parameter. 62 * 63 * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type 64 * 65 * @return $this The builder instance (for fluid interface) 66 * 67 * @deprecated Use setType() instead 68 */ 69 public function setTypeHint($type) { 70 return $this->setType($type); 71 } 72 73 /** 74 * Make the parameter accept the value by reference. 75 * 76 * @return $this The builder instance (for fluid interface) 77 */ 78 public function makeByRef() { 79 $this->byRef = true; 80 81 return $this; 82 } 83 84 /** 85 * Make the parameter variadic 86 * 87 * @return $this The builder instance (for fluid interface) 88 */ 89 public function makeVariadic() { 90 $this->variadic = true; 91 92 return $this; 93 } 94 95 /** 96 * Returns the built parameter node. 97 * 98 * @return Node\Param The built parameter node 99 */ 100 public function getNode() : Node { 101 return new Node\Param( 102 new Node\Expr\Variable($this->name), 103 $this->default, $this->type, $this->byRef, $this->variadic 104 ); 105 } 106} 107