mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2024-12-02 09:27:58 +01:00
1.8 KiB
1.8 KiB
Frequently Asked Questions
How can the parent of a node be obtained?
The AST does not store parent nodes by default. However, the ParentConnectingVisitor
can be used to achieve this:
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor\ParentConnectingVisitor;
use PhpParser\ParserFactory;
$code = '...';
$traverser = new NodeTraverser;
$traverser->addVisitor(new ParentConnectingVisitor);
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
$ast = $parser->parse($code);
$ast = $traverser->traverse($ast);
After running this visitor, the parent node can be obtained through $node->getAttribute('parent')
.
How can the next/previous sibling of a node be obtained?
Again, siblings are not stored by default, but the NodeConnectingVisitor
can be used to store
the previous / next node with a common parent as well:
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor\NodeConnectingVisitor;
use PhpParser\ParserFactory;
$code = '...';
$traverser = new NodeTraverser;
$traverser->addVisitor(new NodeConnectingVisitor);
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
$ast = $parser->parse($code);
$ast = $traverser->traverse($ast);
After running this visitor, the parent node can be obtained through $node->getAttribute('parent')
,
the previous node can be obtained through $node->getAttribute('previous')
, and the next node can be
obtained through $node->getAttribute('next')
.
ParentConnectingVisitor
and NodeConnectingVisitor
should not be used at the same time. The latter
includes the functionality of the former.