1<?php declare(strict_types=1); 2 3namespace PhpParser\Node\Expr; 4 5use PhpParser\Node; 6use PhpParser\Node\Expr; 7use PhpParser\Node\FunctionLike; 8 9class ArrowFunction extends Expr implements FunctionLike { 10 /** @var bool Whether the closure is static */ 11 public bool $static; 12 13 /** @var bool Whether to return by reference */ 14 public bool $byRef; 15 16 /** @var Node\Param[] */ 17 public array $params = []; 18 19 /** @var null|Node\Identifier|Node\Name|Node\ComplexType */ 20 public ?Node $returnType; 21 22 /** @var Expr Expression body */ 23 public Expr $expr; 24 /** @var Node\AttributeGroup[] */ 25 public array $attrGroups; 26 27 /** 28 * @param array{ 29 * expr: Expr, 30 * static?: bool, 31 * byRef?: bool, 32 * params?: Node\Param[], 33 * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, 34 * attrGroups?: Node\AttributeGroup[] 35 * } $subNodes Array of the following subnodes: 36 * 'expr' : Expression body 37 * 'static' => false : Whether the closure is static 38 * 'byRef' => false : Whether to return by reference 39 * 'params' => array() : Parameters 40 * 'returnType' => null : Return type 41 * 'attrGroups' => array() : PHP attribute groups 42 * @param array<string, mixed> $attributes Additional attributes 43 */ 44 public function __construct(array $subNodes, array $attributes = []) { 45 $this->attributes = $attributes; 46 $this->static = $subNodes['static'] ?? false; 47 $this->byRef = $subNodes['byRef'] ?? false; 48 $this->params = $subNodes['params'] ?? []; 49 $this->returnType = $subNodes['returnType'] ?? null; 50 $this->expr = $subNodes['expr']; 51 $this->attrGroups = $subNodes['attrGroups'] ?? []; 52 } 53 54 public function getSubNodeNames(): array { 55 return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr']; 56 } 57 58 public function returnsByRef(): bool { 59 return $this->byRef; 60 } 61 62 public function getParams(): array { 63 return $this->params; 64 } 65 66 public function getReturnType() { 67 return $this->returnType; 68 } 69 70 public function getAttrGroups(): array { 71 return $this->attrGroups; 72 } 73 74 /** 75 * @return Node\Stmt\Return_[] 76 */ 77 public function getStmts(): array { 78 return [new Node\Stmt\Return_($this->expr)]; 79 } 80 81 public function getType(): string { 82 return 'Expr_ArrowFunction'; 83 } 84} 85