class PrintableNewAnonClassNode
This node is used internally by the format-preserving pretty printer to print anonymous classes.
The normal anonymous class structure violates assumptions about the order of token offsets. Namely, the constructor arguments are part of the Expr\New_ node and follow the class node, even though they are actually interleaved with them. This special node type is used temporarily to restore a sane token offset order.
@internal
Hierarchy
- class \PhpParser\NodeAbstract implements \PhpParser\Node, \PhpParser\JsonSerializable
- class \PhpParser\Node\Expr extends \PhpParser\NodeAbstract
- class \PhpParser\Internal\PrintableNewAnonClassNode extends \PhpParser\Node\Expr
- class \PhpParser\Node\Expr extends \PhpParser\NodeAbstract
Expanded class hierarchy of PrintableNewAnonClassNode
1 file declares its use of PrintableNewAnonClassNode
- PrettyPrinterAbstract.php in vendor/
nikic/ php-parser/ lib/ PhpParser/ PrettyPrinterAbstract.php
File
-
vendor/
nikic/ php-parser/ lib/ PhpParser/ Internal/ PrintableNewAnonClassNode.php, line 18
Namespace
PhpParser\InternalView source
class PrintableNewAnonClassNode extends Expr {
/** @var Node\AttributeGroup[] PHP attribute groups */
public array $attrGroups;
/** @var int Modifiers */
public int $flags;
/** @var (Node\Arg|Node\VariadicPlaceholder)[] Arguments */
public array $args;
/** @var null|Node\Name Name of extended class */
public ?Node\Name $extends;
/** @var Node\Name[] Names of implemented interfaces */
public array $implements;
/** @var Node\Stmt[] Statements */
public array $stmts;
/**
* @param Node\AttributeGroup[] $attrGroups PHP attribute groups
* @param (Node\Arg|Node\VariadicPlaceholder)[] $args Arguments
* @param Node\Name|null $extends Name of extended class
* @param Node\Name[] $implements Names of implemented interfaces
* @param Node\Stmt[] $stmts Statements
* @param array<string, mixed> $attributes Attributes
*/
public function __construct(array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements, array $stmts, array $attributes) {
parent::__construct($attributes);
$this->attrGroups = $attrGroups;
$this->flags = $flags;
$this->args = $args;
$this->extends = $extends;
$this->implements = $implements;
$this->stmts = $stmts;
}
public static function fromNewNode(Expr\New_ $newNode) : self {
$class = $newNode->class;
assert($class instanceof Node\Stmt\Class_);
// We don't assert that $class->name is null here, to allow consumers to assign unique names
// to anonymous classes for their own purposes. We simplify ignore the name here.
return new self($class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements, $class->stmts, $newNode->getAttributes());
}
public function getType() : string {
return 'Expr_PrintableNewAnonClass';
}
public function getSubNodeNames() : array {
return [
'attrGroups',
'flags',
'args',
'extends',
'implements',
'stmts',
];
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
PrintableNewAnonClassNode::$args | public | property | @var (Node\Arg|Node\VariadicPlaceholder)[] Arguments |
PrintableNewAnonClassNode::$attrGroups | public | property | @var Node\AttributeGroup[] PHP attribute groups |
PrintableNewAnonClassNode::$extends | public | property | @var null|Node\Name Name of extended class |
PrintableNewAnonClassNode::$flags | public | property | @var int Modifiers |
PrintableNewAnonClassNode::$implements | public | property | @var Node\Name[] Names of implemented interfaces |
PrintableNewAnonClassNode::$stmts | public | property | @var Node\Stmt[] Statements |
PrintableNewAnonClassNode::fromNewNode | public static | function | |
PrintableNewAnonClassNode::getSubNodeNames | public | function | |
PrintableNewAnonClassNode::getType | public | function | |
PrintableNewAnonClassNode::__construct | public | function |