bug #40203 [String] Check if function exists before declaring it (Nyholm)

This PR was squashed before being merged into the 5.2 branch.

Discussion
----------

[String] Check if function exists before declaring it

| Q             | A
| ------------- | ---
| Branch?       | 5.2
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

If you installed a command line tool like `psalm` with composer and then try to run it on a project that included the String component you will get an error like:

> Fatal error: Cannot redeclare Symfony\Component\String\u() (previously declared in /Workspace/symfony/src/Symfony/Component/String/Resources/functions.php:14) in /user/.composer/vendor/symfony/string/Resources/functions.php on line 14

That is because we are loading two installations of the string component.

Commits
-------

cc00e0eb78 [String] Check if function exists before declaring it
This commit is contained in:
Nicolas Grekas 2021-02-16 11:20:41 +01:00
commit 7dcf156242
2 changed files with 27 additions and 19 deletions

View File

@ -11,16 +11,21 @@
namespace Symfony\Component\String;
if (!\function_exists(u::class)) {
function u(?string $string = ''): UnicodeString
{
return new UnicodeString($string ?? '');
}
}
if (!\function_exists(b::class)) {
function b(?string $string = ''): ByteString
{
return new ByteString($string ?? '');
}
}
if (!\function_exists(s::class)) {
/**
* @return UnicodeString|ByteString
*/
@ -30,3 +35,4 @@ function s(?string $string = ''): AbstractString
return preg_match('//u', $string) ? new UnicodeString($string) : new ByteString($string);
}
}

View File

@ -11,6 +11,7 @@
namespace Symfony\Component\Translation;
if (!\function_exists(t::class)) {
/**
* @author Nate Wiebe <nate@northern.co>
*/
@ -18,3 +19,4 @@ function t(string $message, array $parameters = [], string $domain = null): Tran
{
return new TranslatableMessage($message, $parameters, $domain);
}
}