1<?php declare(strict_types=1); 2 3namespace PhpParser\Node\Expr; 4 5use PhpParser\Node\Arg; 6use PhpParser\Node\Expr; 7use PhpParser\Node\VariadicPlaceholder; 8 9abstract class CallLike extends Expr { 10 /** 11 * Return raw arguments, which may be actual Args, or VariadicPlaceholders for first-class 12 * callables. 13 * 14 * @return array<Arg|VariadicPlaceholder> 15 */ 16 abstract public function getRawArgs(): array; 17 18 /** 19 * Returns whether this call expression is actually a first class callable. 20 */ 21 public function isFirstClassCallable(): bool { 22 $rawArgs = $this->getRawArgs(); 23 return count($rawArgs) === 1 && current($rawArgs) instanceof VariadicPlaceholder; 24 } 25 26 /** 27 * Assert that this is not a first-class callable and return only ordinary Args. 28 * 29 * @return Arg[] 30 */ 31 public function getArgs(): array { 32 assert(!$this->isFirstClassCallable()); 33 return $this->getRawArgs(); 34 } 35} 36