Файл: vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
Строк: 89
<?php declare(strict_types=1);
namespace PhpParserInternal;
use PhpParserNode;
use PhpParserNodeExpr;
/**
* 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 ExprNew_ 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
*/
class PrintableNewAnonClassNode extends Expr
{
/** @var NodeAttributeGroup[] PHP attribute groups */
public $attrGroups;
/** @var NodeArg[] Arguments */
public $args;
/** @var null|NodeName Name of extended class */
public $extends;
/** @var NodeName[] Names of implemented interfaces */
public $implements;
/** @var NodeStmt[] Statements */
public $stmts;
public function __construct(
array $attrGroups, array $args, NodeName $extends = null, array $implements,
array $stmts, array $attributes
) {
parent::__construct($attributes);
$this->attrGroups = $attrGroups;
$this->args = $args;
$this->extends = $extends;
$this->implements = $implements;
$this->stmts = $stmts;
}
public static function fromNewNode(ExprNew_ $newNode) {
$class = $newNode->class;
assert($class instanceof NodeStmtClass_);
// 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, $newNode->args, $class->extends, $class->implements,
$class->stmts, $newNode->getAttributes()
);
}
public function getType() : string {
return 'Expr_PrintableNewAnonClass';
}
public function getSubNodeNames() : array {
return ['attrGroups', 'args', 'extends', 'implements', 'stmts'];
}
}