1: <?php declare(strict_types=1);
2:
3: namespace PhpParser\Node\Expr;
4:
5: use PhpParser\Node\Arg;
6: use PhpParser\Node\Expr;
7: use PhpParser\Node\VariadicPlaceholder;
8:
9: abstract 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: foreach ($this->getRawArgs() as $arg) {
23: if ($arg instanceof VariadicPlaceholder) {
24: return true;
25: }
26: }
27: return false;
28: }
29:
30: /**
31: * Assert that this is not a first-class callable and return only ordinary Args.
32: *
33: * @return Arg[]
34: */
35: public function getArgs(): array {
36: assert(!$this->isFirstClassCallable());
37: return $this->getRawArgs();
38: }
39: }