From 941f5bb6072b5676dd1e381cdc7b7aed9847dabb Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 28 May 2021 09:59:09 +0200 Subject: [PATCH] Leverage Stringable --- .../Validator/Constraints/UniqueEntityValidator.php | 2 +- src/Symfony/Bundle/FrameworkBundle/Secrets/SodiumVault.php | 2 +- src/Symfony/Component/Cache/CacheItem.php | 2 +- .../Component/Console/EventListener/ErrorListener.php | 2 +- src/Symfony/Component/Console/Helper/Table.php | 2 +- src/Symfony/Component/Console/Logger/ConsoleLogger.php | 2 +- src/Symfony/Component/HttpClient/HttpClientTrait.php | 2 +- src/Symfony/Component/HttpFoundation/InputBag.php | 4 ++-- src/Symfony/Component/HttpKernel/Log/Logger.php | 2 +- .../Security/Core/Authentication/Token/AbstractToken.php | 2 +- .../Component/Security/Core/Signature/SignatureHasher.php | 2 +- .../Security/Http/Authenticator/FormLoginAuthenticator.php | 2 +- .../Firewall/UsernamePasswordFormAuthenticationListener.php | 2 +- src/Symfony/Component/Validator/ConstraintValidator.php | 2 +- src/Symfony/Component/Validator/ConstraintViolation.php | 6 +----- .../Component/Validator/Constraints/BicValidator.php | 2 +- .../Component/Validator/Constraints/CountryValidator.php | 2 +- .../Component/Validator/Constraints/CurrencyValidator.php | 2 +- .../Component/Validator/Constraints/DateTimeValidator.php | 2 +- .../Component/Validator/Constraints/DateValidator.php | 2 +- .../Component/Validator/Constraints/EmailValidator.php | 2 +- .../Component/Validator/Constraints/FileValidator.php | 2 +- .../Component/Validator/Constraints/HostnameValidator.php | 2 +- .../Component/Validator/Constraints/IbanValidator.php | 2 +- src/Symfony/Component/Validator/Constraints/IpValidator.php | 2 +- .../Component/Validator/Constraints/IsbnValidator.php | 2 +- .../Component/Validator/Constraints/IsinValidator.php | 2 +- .../Component/Validator/Constraints/IssnValidator.php | 2 +- .../Component/Validator/Constraints/JsonValidator.php | 2 +- .../Component/Validator/Constraints/LanguageValidator.php | 2 +- .../Component/Validator/Constraints/LengthValidator.php | 2 +- .../Component/Validator/Constraints/LocaleValidator.php | 2 +- .../Component/Validator/Constraints/LuhnValidator.php | 2 +- .../Constraints/NotCompromisedPasswordValidator.php | 2 +- .../Component/Validator/Constraints/RegexValidator.php | 2 +- .../Component/Validator/Constraints/TimeValidator.php | 2 +- .../Component/Validator/Constraints/TimezoneValidator.php | 2 +- .../Component/Validator/Constraints/UlidValidator.php | 2 +- .../Component/Validator/Constraints/UrlValidator.php | 2 +- .../Component/Validator/Constraints/UuidValidator.php | 2 +- 40 files changed, 41 insertions(+), 45 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index bed785cbd88c..8b3f348e9e88 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -181,7 +181,7 @@ private function formatWithIdentifiers($em, $class, $value) return $this->formatValue($value, self::PRETTY_DATE); } - if (method_exists($value, '__toString')) { + if ($value instanceof \Stringable) { return (string) $value; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Secrets/SodiumVault.php b/src/Symfony/Bundle/FrameworkBundle/Secrets/SodiumVault.php index 7b2740fea728..44507755bda8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Secrets/SodiumVault.php +++ b/src/Symfony/Bundle/FrameworkBundle/Secrets/SodiumVault.php @@ -33,7 +33,7 @@ class SodiumVault extends AbstractVault implements EnvVarLoaderInterface */ public function __construct(string $secretsDir, $decryptionKey = null) { - if (null !== $decryptionKey && !\is_string($decryptionKey) && !(\is_object($decryptionKey) && method_exists($decryptionKey, '__toString'))) { + if (null !== $decryptionKey && !\is_string($decryptionKey) && !$decryptionKey instanceof \Stringable) { throw new \TypeError(sprintf('Decryption key should be a string or an object that implements the __toString() method, "%s" given.', get_debug_type($decryptionKey))); } diff --git a/src/Symfony/Component/Cache/CacheItem.php b/src/Symfony/Component/Cache/CacheItem.php index 7140ddb5a1e4..38f1c8cd4d7a 100644 --- a/src/Symfony/Component/Cache/CacheItem.php +++ b/src/Symfony/Component/Cache/CacheItem.php @@ -121,7 +121,7 @@ public function tag($tags): ItemInterface $tags = [$tags]; } foreach ($tags as $tag) { - if (!\is_string($tag) && !(\is_object($tag) && method_exists($tag, '__toString'))) { + if (!\is_string($tag) && !$tag instanceof \Stringable) { throw new InvalidArgumentException(sprintf('Cache tag must be string or object that implements __toString(), "%s" given.', \is_object($tag) ? \get_class($tag) : \gettype($tag))); } $tag = (string) $tag; diff --git a/src/Symfony/Component/Console/EventListener/ErrorListener.php b/src/Symfony/Component/Console/EventListener/ErrorListener.php index 897d9853f284..5f34ca4c0adf 100644 --- a/src/Symfony/Component/Console/EventListener/ErrorListener.php +++ b/src/Symfony/Component/Console/EventListener/ErrorListener.php @@ -82,7 +82,7 @@ private static function getInputString(ConsoleEvent $event): ?string $commandName = $event->getCommand() ? $event->getCommand()->getName() : null; $input = $event->getInput(); - if (method_exists($input, '__toString')) { + if ($input instanceof \Stringable) { if ($commandName) { return str_replace(["'$commandName'", "\"$commandName\""], $commandName, (string) $input); } diff --git a/src/Symfony/Component/Console/Helper/Table.php b/src/Symfony/Component/Console/Helper/Table.php index 4bf3ed3960a0..c72ff2500b7c 100644 --- a/src/Symfony/Component/Console/Helper/Table.php +++ b/src/Symfony/Component/Console/Helper/Table.php @@ -631,7 +631,7 @@ private function fillNextRows(array $rows, int $line): array { $unmergedRows = []; foreach ($rows[$line] as $column => $cell) { - if (null !== $cell && !$cell instanceof TableCell && !is_scalar($cell) && !(\is_object($cell) && method_exists($cell, '__toString'))) { + if (null !== $cell && !$cell instanceof TableCell && !is_scalar($cell) && !$cell instanceof \Stringable) { throw new InvalidArgumentException(sprintf('A cell must be a TableCell, a scalar or an object implementing "__toString()", "%s" given.', get_debug_type($cell))); } if ($cell instanceof TableCell && $cell->getRowspan() > 1) { diff --git a/src/Symfony/Component/Console/Logger/ConsoleLogger.php b/src/Symfony/Component/Console/Logger/ConsoleLogger.php index 4a0315656574..0379b2036c02 100644 --- a/src/Symfony/Component/Console/Logger/ConsoleLogger.php +++ b/src/Symfony/Component/Console/Logger/ConsoleLogger.php @@ -110,7 +110,7 @@ private function interpolate(string $message, array $context): string $replacements = []; foreach ($context as $key => $val) { - if (null === $val || is_scalar($val) || (\is_object($val) && method_exists($val, '__toString'))) { + if (null === $val || is_scalar($val) || $val instanceof \Stringable) { $replacements["{{$key}}"] = $val; } elseif ($val instanceof \DateTimeInterface) { $replacements["{{$key}}"] = $val->format(\DateTime::RFC3339); diff --git a/src/Symfony/Component/HttpClient/HttpClientTrait.php b/src/Symfony/Component/HttpClient/HttpClientTrait.php index 2b5d27b40ed3..ebf9ce1cbc45 100644 --- a/src/Symfony/Component/HttpClient/HttpClientTrait.php +++ b/src/Symfony/Component/HttpClient/HttpClientTrait.php @@ -248,7 +248,7 @@ private static function normalizeHeaders(array $headers): array $normalizedHeaders = []; foreach ($headers as $name => $values) { - if (\is_object($values) && method_exists($values, '__toString')) { + if ($values instanceof \Stringable) { $values = (string) $values; } diff --git a/src/Symfony/Component/HttpFoundation/InputBag.php b/src/Symfony/Component/HttpFoundation/InputBag.php index 029bb45e8128..6bec212c4590 100644 --- a/src/Symfony/Component/HttpFoundation/InputBag.php +++ b/src/Symfony/Component/HttpFoundation/InputBag.php @@ -29,7 +29,7 @@ final class InputBag extends ParameterBag */ public function get(string $key, $default = null) { - if (null !== $default && !is_scalar($default) && !(\is_object($default) && method_exists($default, '__toString'))) { + if (null !== $default && !is_scalar($default) && !$default instanceof \Stringable) { throw new \InvalidArgumentException(sprintf('Excepted a scalar value as a 2nd argument to "%s()", "%s" given.', __METHOD__, get_debug_type($default))); } @@ -76,7 +76,7 @@ public function add(array $inputs = []) */ public function set(string $key, $value) { - if (null !== $value && !is_scalar($value) && !\is_array($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (null !== $value && !is_scalar($value) && !\is_array($value) && !$value instanceof \Stringable) { throw new \InvalidArgumentException(sprintf('Excepted a scalar, or an array as a 2nd argument to "%s()", "%s" given.', __METHOD__, get_debug_type($value))); } diff --git a/src/Symfony/Component/HttpKernel/Log/Logger.php b/src/Symfony/Component/HttpKernel/Log/Logger.php index 3922d2fe6835..d74703ff1c56 100644 --- a/src/Symfony/Component/HttpKernel/Log/Logger.php +++ b/src/Symfony/Component/HttpKernel/Log/Logger.php @@ -91,7 +91,7 @@ private function format(string $level, string $message, array $context, bool $pr if (false !== strpos($message, '{')) { $replacements = []; foreach ($context as $key => $val) { - if (null === $val || is_scalar($val) || (\is_object($val) && method_exists($val, '__toString'))) { + if (null === $val || is_scalar($val) || $val instanceof \Stringable) { $replacements["{{$key}}"] = $val; } elseif ($val instanceof \DateTimeInterface) { $replacements["{{$key}}"] = $val->format(\DateTime::RFC3339); diff --git a/src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php b/src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php index 709591e22306..0b8389e90d13 100644 --- a/src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php +++ b/src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php @@ -95,7 +95,7 @@ public function getUser() */ public function setUser($user) { - if (!($user instanceof UserInterface || (\is_object($user) && method_exists($user, '__toString')) || \is_string($user))) { + if (!($user instanceof UserInterface || $user instanceof \Stringable || \is_string($user))) { throw new \InvalidArgumentException('$user must be an instanceof UserInterface, an object implementing a __toString method, or a primitive string.'); } diff --git a/src/Symfony/Component/Security/Core/Signature/SignatureHasher.php b/src/Symfony/Component/Security/Core/Signature/SignatureHasher.php index ad4028320589..93d5358f46c4 100644 --- a/src/Symfony/Component/Security/Core/Signature/SignatureHasher.php +++ b/src/Symfony/Component/Security/Core/Signature/SignatureHasher.php @@ -88,7 +88,7 @@ public function computeSignatureHash(UserInterface $user, int $expires): string $value = $value->format('c'); } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new \InvalidArgumentException(sprintf('The property path "%s" on the user object "%s" must return a value that can be cast to a string, but "%s" was returned.', $property, \get_class($user), get_debug_type($value))); } $signatureFields[] = base64_encode($value); diff --git a/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php b/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php index 892f19a9a66b..0ca6af195188 100644 --- a/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php +++ b/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php @@ -136,7 +136,7 @@ private function getCredentials(Request $request): array $credentials['password'] = ParameterBagUtils::getRequestParameterValue($request, $this->options['password_parameter']) ?? ''; } - if (!\is_string($credentials['username']) && (!\is_object($credentials['username']) || !method_exists($credentials['username'], '__toString'))) { + if (!\is_string($credentials['username']) && !$credentials['username'] instanceof \Stringable) { throw new BadRequestHttpException(sprintf('The key "%s" must be a string, "%s" given.', $this->options['username_parameter'], \gettype($credentials['username']))); } diff --git a/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordFormAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordFormAuthenticationListener.php index 0d13f81e2ec5..53a561648ac8 100644 --- a/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordFormAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordFormAuthenticationListener.php @@ -89,7 +89,7 @@ protected function attemptAuthentication(Request $request) $password = ParameterBagUtils::getRequestParameterValue($request, $this->options['password_parameter']); } - if (!\is_string($username) && (!\is_object($username) || !method_exists($username, '__toString'))) { + if (!\is_string($username) && !$username instanceof \Stringable) { throw new BadRequestHttpException(sprintf('The key "%s" must be a string, "%s" given.', $this->options['username_parameter'], get_debug_type($username))); } diff --git a/src/Symfony/Component/Validator/ConstraintValidator.php b/src/Symfony/Component/Validator/ConstraintValidator.php index f976513ba1cb..f2b1f40c46f9 100644 --- a/src/Symfony/Component/Validator/ConstraintValidator.php +++ b/src/Symfony/Component/Validator/ConstraintValidator.php @@ -100,7 +100,7 @@ protected function formatValue($value, int $format = 0) } if (\is_object($value)) { - if (($format & self::OBJECT_TO_STRING) && method_exists($value, '__toString')) { + if (($format & self::OBJECT_TO_STRING) && $value instanceof \Stringable) { return $value->__toString(); } diff --git a/src/Symfony/Component/Validator/ConstraintViolation.php b/src/Symfony/Component/Validator/ConstraintViolation.php index e9aa1bd9f440..2f05bec8d4e2 100644 --- a/src/Symfony/Component/Validator/ConstraintViolation.php +++ b/src/Symfony/Component/Validator/ConstraintViolation.php @@ -49,12 +49,8 @@ class ConstraintViolation implements ConstraintViolationInterface * caused the violation * @param mixed $cause The cause of the violation */ - public function __construct($message, ?string $messageTemplate, array $parameters, $root, ?string $propertyPath, $invalidValue, int $plural = null, string $code = null, Constraint $constraint = null, $cause = null) + public function __construct(string|\Stringable $message, ?string $messageTemplate, array $parameters, $root, ?string $propertyPath, $invalidValue, int $plural = null, string $code = null, Constraint $constraint = null, $cause = null) { - if (!\is_string($message) && !(\is_object($message) && method_exists($message, '__toString'))) { - throw new \TypeError('Constraint violation message should be a string or an object which implements the __toString() method.'); - } - $this->message = $message; $this->messageTemplate = $messageTemplate; $this->parameters = $parameters; diff --git a/src/Symfony/Component/Validator/Constraints/BicValidator.php b/src/Symfony/Component/Validator/Constraints/BicValidator.php index ff87b6e0e692..dd805eeaaf35 100644 --- a/src/Symfony/Component/Validator/Constraints/BicValidator.php +++ b/src/Symfony/Component/Validator/Constraints/BicValidator.php @@ -68,7 +68,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/CountryValidator.php b/src/Symfony/Component/Validator/Constraints/CountryValidator.php index 895cca3df1fa..abb51d98af54 100644 --- a/src/Symfony/Component/Validator/Constraints/CountryValidator.php +++ b/src/Symfony/Component/Validator/Constraints/CountryValidator.php @@ -37,7 +37,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/CurrencyValidator.php b/src/Symfony/Component/Validator/Constraints/CurrencyValidator.php index 4f294e42bf7b..6e0b452d3aa9 100644 --- a/src/Symfony/Component/Validator/Constraints/CurrencyValidator.php +++ b/src/Symfony/Component/Validator/Constraints/CurrencyValidator.php @@ -38,7 +38,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/DateTimeValidator.php b/src/Symfony/Component/Validator/Constraints/DateTimeValidator.php index 77894ebbab57..969185898b8c 100644 --- a/src/Symfony/Component/Validator/Constraints/DateTimeValidator.php +++ b/src/Symfony/Component/Validator/Constraints/DateTimeValidator.php @@ -34,7 +34,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/DateValidator.php b/src/Symfony/Component/Validator/Constraints/DateValidator.php index 3f18cac7c1f8..d93ad82af2ac 100644 --- a/src/Symfony/Component/Validator/Constraints/DateValidator.php +++ b/src/Symfony/Component/Validator/Constraints/DateValidator.php @@ -46,7 +46,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/EmailValidator.php b/src/Symfony/Component/Validator/Constraints/EmailValidator.php index c879ee466e39..67fd2b8d9de6 100644 --- a/src/Symfony/Component/Validator/Constraints/EmailValidator.php +++ b/src/Symfony/Component/Validator/Constraints/EmailValidator.php @@ -56,7 +56,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/FileValidator.php b/src/Symfony/Component/Validator/Constraints/FileValidator.php index 3a4195ffbec5..58dab2c60efe 100644 --- a/src/Symfony/Component/Validator/Constraints/FileValidator.php +++ b/src/Symfony/Component/Validator/Constraints/FileValidator.php @@ -116,7 +116,7 @@ public function validate($value, Constraint $constraint) } } - if (!is_scalar($value) && !$value instanceof FileObject && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof FileObject && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/HostnameValidator.php b/src/Symfony/Component/Validator/Constraints/HostnameValidator.php index 144d57e37ddc..abba43a753df 100644 --- a/src/Symfony/Component/Validator/Constraints/HostnameValidator.php +++ b/src/Symfony/Component/Validator/Constraints/HostnameValidator.php @@ -41,7 +41,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/IbanValidator.php b/src/Symfony/Component/Validator/Constraints/IbanValidator.php index 0f39a3a9ceaf..9b7550c86a00 100644 --- a/src/Symfony/Component/Validator/Constraints/IbanValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IbanValidator.php @@ -150,7 +150,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/IpValidator.php b/src/Symfony/Component/Validator/Constraints/IpValidator.php index e48d41e6d4bb..9478eeabdc42 100644 --- a/src/Symfony/Component/Validator/Constraints/IpValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IpValidator.php @@ -37,7 +37,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/IsbnValidator.php b/src/Symfony/Component/Validator/Constraints/IsbnValidator.php index 78671004984b..75ac4834c36a 100644 --- a/src/Symfony/Component/Validator/Constraints/IsbnValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IsbnValidator.php @@ -40,7 +40,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/IsinValidator.php b/src/Symfony/Component/Validator/Constraints/IsinValidator.php index d5e4d9dbc973..1f952ca5cda8 100644 --- a/src/Symfony/Component/Validator/Constraints/IsinValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IsinValidator.php @@ -36,7 +36,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/IssnValidator.php b/src/Symfony/Component/Validator/Constraints/IssnValidator.php index aa83201cdabc..69c18a5c08aa 100644 --- a/src/Symfony/Component/Validator/Constraints/IssnValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IssnValidator.php @@ -39,7 +39,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/JsonValidator.php b/src/Symfony/Component/Validator/Constraints/JsonValidator.php index e553ae359b14..02190c57abf5 100644 --- a/src/Symfony/Component/Validator/Constraints/JsonValidator.php +++ b/src/Symfony/Component/Validator/Constraints/JsonValidator.php @@ -33,7 +33,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedTypeException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/LanguageValidator.php b/src/Symfony/Component/Validator/Constraints/LanguageValidator.php index 911a71331487..4509625d2d8d 100644 --- a/src/Symfony/Component/Validator/Constraints/LanguageValidator.php +++ b/src/Symfony/Component/Validator/Constraints/LanguageValidator.php @@ -37,7 +37,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/LengthValidator.php b/src/Symfony/Component/Validator/Constraints/LengthValidator.php index cd05243161b2..ef3732a37556 100644 --- a/src/Symfony/Component/Validator/Constraints/LengthValidator.php +++ b/src/Symfony/Component/Validator/Constraints/LengthValidator.php @@ -34,7 +34,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/LocaleValidator.php b/src/Symfony/Component/Validator/Constraints/LocaleValidator.php index 860273d4f7e3..24088e8d9b04 100644 --- a/src/Symfony/Component/Validator/Constraints/LocaleValidator.php +++ b/src/Symfony/Component/Validator/Constraints/LocaleValidator.php @@ -37,7 +37,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/LuhnValidator.php b/src/Symfony/Component/Validator/Constraints/LuhnValidator.php index 0f568fa6e495..4b6b01a8f185 100644 --- a/src/Symfony/Component/Validator/Constraints/LuhnValidator.php +++ b/src/Symfony/Component/Validator/Constraints/LuhnValidator.php @@ -49,7 +49,7 @@ public function validate($value, Constraint $constraint) // Work with strings only, because long numbers are represented as floats // internally and don't work with strlen() - if (!\is_string($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!\is_string($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/NotCompromisedPasswordValidator.php b/src/Symfony/Component/Validator/Constraints/NotCompromisedPasswordValidator.php index adcdb7a59ff5..b9318aa0338d 100644 --- a/src/Symfony/Component/Validator/Constraints/NotCompromisedPasswordValidator.php +++ b/src/Symfony/Component/Validator/Constraints/NotCompromisedPasswordValidator.php @@ -63,7 +63,7 @@ public function validate($value, Constraint $constraint) return; } - if (null !== $value && !is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (null !== $value && !is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/RegexValidator.php b/src/Symfony/Component/Validator/Constraints/RegexValidator.php index 7fadf7682b05..abbc4c5b13d1 100644 --- a/src/Symfony/Component/Validator/Constraints/RegexValidator.php +++ b/src/Symfony/Component/Validator/Constraints/RegexValidator.php @@ -37,7 +37,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/TimeValidator.php b/src/Symfony/Component/Validator/Constraints/TimeValidator.php index 5a71e4439c76..5067107ab470 100644 --- a/src/Symfony/Component/Validator/Constraints/TimeValidator.php +++ b/src/Symfony/Component/Validator/Constraints/TimeValidator.php @@ -46,7 +46,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/TimezoneValidator.php b/src/Symfony/Component/Validator/Constraints/TimezoneValidator.php index ab6b4eed626a..605dd6139200 100644 --- a/src/Symfony/Component/Validator/Constraints/TimezoneValidator.php +++ b/src/Symfony/Component/Validator/Constraints/TimezoneValidator.php @@ -39,7 +39,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/UlidValidator.php b/src/Symfony/Component/Validator/Constraints/UlidValidator.php index 45f85b852d23..596ea9302d06 100644 --- a/src/Symfony/Component/Validator/Constraints/UlidValidator.php +++ b/src/Symfony/Component/Validator/Constraints/UlidValidator.php @@ -37,7 +37,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/UrlValidator.php b/src/Symfony/Component/Validator/Constraints/UrlValidator.php index b9f3f44efce3..e10148c954ac 100644 --- a/src/Symfony/Component/Validator/Constraints/UrlValidator.php +++ b/src/Symfony/Component/Validator/Constraints/UrlValidator.php @@ -52,7 +52,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } diff --git a/src/Symfony/Component/Validator/Constraints/UuidValidator.php b/src/Symfony/Component/Validator/Constraints/UuidValidator.php index 06629667848a..480d8c32b4ca 100644 --- a/src/Symfony/Component/Validator/Constraints/UuidValidator.php +++ b/src/Symfony/Component/Validator/Constraints/UuidValidator.php @@ -72,7 +72,7 @@ public function validate($value, Constraint $constraint) return; } - if (!is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + if (!is_scalar($value) && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); }