setNode('test', clone $left); $left->setAttribute('always_defined', true); } public function compile(Compiler $compiler): void { $compiler ->raw('((') ->subcompile($this->getNode('test')) ->raw(') ? (') ->subcompile($this->getNode('left')) ->raw(') : (') ->subcompile($this->getNode('right')) ->raw('))') ; } public function operator(Compiler $compiler): Compiler { return $compiler->raw('?:'); } public function getOperandNamesToEscape(): array { return ['left', 'right']; } }