original_string: public static function fromString($cookie, $url = null)
      {
          $parts = explode(';', $cookie);
  
          if (false === strpos($parts[0], '=')) {
              throw new \InvalidArgumentException(sprintf('The cookie string "%s" is not valid.', $parts[0]));
          }
  
          list($name, $value) = explode('=', array_shift($parts), 2);
  
          $values = [
              'name' => trim($name),
              'value' => trim($value),
              'expires' => null,
              'path' => '/',
              'domain' => '',
              'secure' => false,
              'httponly' => false,
              'passedRawValue' => true,
              'samesite' => null,
          ];
  
          if (null !== $url) {
              if ((false === $urlParts = parse_url($url)) || !isset($urlParts['host'])) {
                  throw new \InvalidArgumentException(sprintf('The URL "%s" is not valid.', $url));
              }
  
              $values['domain'] = $urlParts['host'];
              $values['path'] = isset($urlParts['path']) ? substr($urlParts['path'], 0, strrpos($urlParts['path'], '/')) : '';
          }
  
          foreach ($parts as $part) {
              $part = trim($part);
  
              if ('secure' === strtolower($part)) {
                  // Ignore the secure flag if the original URI is not given or is not HTTPS
                  if (!$url || !isset($urlParts['scheme']) || 'https' != $urlParts['scheme']) {
                      continue;
                  }
  
                  $values['secure'] = true;
  
                  continue;
              }
  
              if ('httponly' === strtolower($part)) {
                  $values['httponly'] = true;
  
                  continue;
              }
  
              if (2 === \count($elements = explode('=', $part, 2))) {
                  if ('expires' === strtolower($elements[0])) {
                      $elements[1] = self::parseDate($elements[1]);
                  }
  
                  $values[strtolower($elements[0])] = $elements[1];
              }
          }
  
          return new static(
              $values['name'],
              $values['value'],
              $values['expires'],
              $values['path'],
              $values['domain'],
              $values['secure'],
              $values['httponly'],
              $values['passedRawValue'],
              $values['samesite']
          );
      }
code: public static function fromString($cookie, $url = null)
      {
          $parts = explode(';', $cookie);
  
          if (false === strpos($parts[0], '=')) {
              throw new \InvalidArgumentException(sprintf('The cookie string "%s" is not valid.', $parts[0]));
          }
  
          list($name, $value) = explode('=', array_shift($parts), 2);
  
          $values = [
              'name' => trim($name),
              'value' => trim($value),
              'expires' => null,
              'path' => '/',
              'domain' => '',
              'secure' => false,
              'httponly' => false,
              'passedRawValue' => true,
              'samesite' => null,
          ];
  
          if (null !== $url) {
              if ((false === $urlParts = parse_url($url)) || !isset($urlParts['host'])) {
                  throw new \InvalidArgumentException(sprintf('The URL "%s" is not valid.', $url));
              }
  
              $values['domain'] = $urlParts['host'];
              $values['path'] = isset($urlParts['path']) ? substr($urlParts['path'], 0, strrpos($urlParts['path'], '/')) : '';
          }
  
          foreach ($parts as $part) {
              $part = trim($part);
  
              if ('secure' === strtolower($part)) {
                  // Ignore the secure flag if the original URI is not given or is not HTTPS
                  if (!$url || !isset($urlParts['scheme']) || 'https' != $urlParts['scheme']) {
                      continue;
                  }
  
                  $values['secure'] = true;
  
                  continue;
              }
  
              if ('httponly' === strtolower($part)) {
                  $values['httponly'] = true;
  
                  continue;
              }
  
              if (2 === \count($elements = explode('=', $part, 2))) {
                  if ('expires' === strtolower($elements[0])) {
                      $elements[1] = self::parseDate($elements[1]);
                  }
  
                  $values[strtolower($elements[0])] = $elements[1];
              }
          }
  
          return new static(
              $values['name'],
              $values['value'],
              $values['expires'],
              $values['path'],
              $values['domain'],
              $values['secure'],
              $values['httponly'],
              $values['passedRawValue'],
              $values['samesite']
          );
      }
code_tokens: public static function fromString ( $ cookie , $ url = null ) { $ parts = explode ( ';' , $ cookie ) ; if ( false === strpos ( $ parts [ 0 ] , '=' ) ) { throw new \ InvalidArgumentException ( sprintf ( 'The cookie string "%s" is not valid.' , $ parts [ 0 ] ) ) ; } list ( $ name , $ value ) = explode ( '=' , array_shift ( $ parts ) , 2 ) ; $ values = [ 'name' => trim ( $ name ) , 'value' => trim ( $ value ) , 'expires' => null , 'path' => '/' , 'domain' => '' , 'secure' => false , 'httponly' => false , 'passedRawValue' => true , 'samesite' => null , ] ; if ( null !== $ url ) { if ( ( false === $ urlParts = parse_url ( $ url ) ) || ! isset ( $ urlParts [ 'host' ] ) ) { throw new \ InvalidArgumentException ( sprintf ( 'The URL "%s" is not valid.' , $ url ) ) ; } $ values [ 'domain' ] = $ urlParts [ 'host' ] ; $ values [ 'path' ] = isset ( $ urlParts [ 'path' ] ) ? substr ( $ urlParts [ 'path' ] , 0 , strrpos ( $ urlParts [ 'path' ] , '/' ) ) : '' ; } foreach ( $ parts as $ part ) { $ part = trim ( $ part ) ; if ( 'secure' === strtolower ( $ part ) ) { // Ignore the secure flag if the original URI is not given or is not HTTPS if ( ! $ url || ! isset ( $ urlParts [ 'scheme' ] ) || 'https' != $ urlParts [ 'scheme' ] ) { continue ; } $ values [ 'secure' ] = true ; continue ; } if ( 'httponly' === strtolower ( $ part ) ) { $ values [ 'httponly' ] = true ; continue ; } if ( 2 === \ count ( $ elements = explode ( '=' , $ part , 2 ) ) ) { if ( 'expires' === strtolower ( $ elements [ 0 ] ) ) { $ elements [ 1 ] = self :: parseDate ( $ elements [ 1 ] ) ; } $ values [ strtolower ( $ elements [ 0 ] ) ] = $ elements [ 1 ] ; } } return new static ( $ values [ 'name' ] , $ values [ 'value' ] , $ values [ 'expires' ] , $ values [ 'path' ] , $ values [ 'domain' ] , $ values [ 'secure' ] , $ values [ 'httponly' ] , $ values [ 'passedRawValue' ] , $ values [ 'samesite' ] ) ; }
docstring: Creates a Cookie instance from a Set-Cookie header value.
  
  @param string      $cookie A Set-Cookie header value
  @param string|null $url    The base URL
  
  @return static
  
  @throws \InvalidArgumentException
docstring_tokens: Creates a Cookie instance from a Set - Cookie header value .