friendship ended with social-app. php is my new best friend
at main 1.9 kB view raw
1<?php 2 3/* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Symfony\Component\CssSelector\Node; 13 14/** 15 * Represents a "<selector>[<namespace>|<attribute> <operator> <value>]" node. 16 * 17 * This component is a port of the Python cssselect library, 18 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. 19 * 20 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com> 21 * 22 * @internal 23 */ 24class AttributeNode extends AbstractNode 25{ 26 public function __construct( 27 private NodeInterface $selector, 28 private ?string $namespace, 29 private string $attribute, 30 private string $operator, 31 private ?string $value, 32 ) { 33 } 34 35 public function getSelector(): NodeInterface 36 { 37 return $this->selector; 38 } 39 40 public function getNamespace(): ?string 41 { 42 return $this->namespace; 43 } 44 45 public function getAttribute(): string 46 { 47 return $this->attribute; 48 } 49 50 public function getOperator(): string 51 { 52 return $this->operator; 53 } 54 55 public function getValue(): ?string 56 { 57 return $this->value; 58 } 59 60 public function getSpecificity(): Specificity 61 { 62 return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0)); 63 } 64 65 public function __toString(): string 66 { 67 $attribute = $this->namespace ? $this->namespace.'|'.$this->attribute : $this->attribute; 68 69 return 'exists' === $this->operator 70 ? \sprintf('%s[%s[%s]]', $this->getNodeName(), $this->selector, $attribute) 71 : \sprintf("%s[%s[%s %s '%s']]", $this->getNodeName(), $this->selector, $attribute, $this->operator, $this->value); 72 } 73}