Skip to content

[11.x] Use Str::wrap() instead of nesting Str::start() inside Str::finish()#53987

Merged
taylorotwell merged 1 commit intolaravel:11.xfrom
shaedrich:simplify-two-method-calls-into-one
Dec 20, 2024
Merged

[11.x] Use Str::wrap() instead of nesting Str::start() inside Str::finish()#53987
taylorotwell merged 1 commit intolaravel:11.xfrom
shaedrich:simplify-two-method-calls-into-one

Conversation

@shaedrich
Copy link
Copy Markdown
Contributor

Btw, is there a reason, why the null coalescing assignment operator is used instead of just the null coalescing operator?

/**
* Wrap the string with the given strings.
*
* @param string $value
* @param string $before
* @param string|null $after
* @return string
*/
public static function wrap($value, $before, $after = null)
{
return $before.$value.($after ??= $before);
}

@shaedrich shaedrich changed the title Use Str::wrap() instead of nesting Str::start() inside Str::finish() [12.x] Use Str::wrap() instead of nesting Str::start() inside Str::finish() Dec 19, 2024
@shaedrich shaedrich changed the title [12.x] Use Str::wrap() instead of nesting Str::start() inside Str::finish() [11.x] Use Str::wrap() instead of nesting Str::start() inside Str::finish() Dec 19, 2024
@sydgren
Copy link
Copy Markdown

sydgren commented Dec 20, 2024

Btw, is there a reason, why the null coalescing assignment operator is used instead of just the null coalescing operator?

/**
* Wrap the string with the given strings.
*
* @param string $value
* @param string $before
* @param string|null $after
* @return string
*/
public static function wrap($value, $before, $after = null)
{
return $before.$value.($after ??= $before);
}

It does indeed seem unnecessary to reassign the $after variable.

I guess it's some leftovers from a previous change. Perhaps $after ??= $before has been on its own line above the return statement?

@shaedrich
Copy link
Copy Markdown
Contributor Author

shaedrich commented Dec 20, 2024

Would make sense, but—I checked it real quick—nope, it's always been this way (since 8ea50bc) 🤔

@stevebauman Is there a reason behind that, that we are missing or can the equal sign be removed?

@taylorotwell taylorotwell merged commit 606f82b into laravel:11.x Dec 20, 2024
@tontonsb
Copy link
Copy Markdown
Contributor

Hey @shaedrich isn't wrap a bit different in that it always adds the characters instead of leaving things like <my-reference> intact?

@shaedrich
Copy link
Copy Markdown
Contributor Author

@tontonsb Oh, you are right 🤦🏻 👍🏻 Shouldn't there be a method for that? But wrap() is already taken as a name—or would you add a flag to wrap()? 🤔

@shaedrich shaedrich deleted the simplify-two-method-calls-into-one branch December 20, 2024 16:36
@tontonsb
Copy link
Copy Markdown
Contributor

@shaedrich unfourtunately I don't have a nice solution for this.

In other places (collections and Arr) wrap is already idempotent. I would've assumed the same about Str::wrap if you hadn't highlighted the method in this PR. So wrap seems like the correct name for that.. But the current API is already complex enough without a fourth param...

I looked into the history and found surround. But I'd find it intuitive to have names be somewhat like this:

Str::wrap('\_(ツ)_/', '¯'); // ¯\_(ツ)_/¯
Str::wrap('¯\_(ツ)_/¯', '¯'); // ¯\_(ツ)_/¯
Str::surround('¯\_(ツ)_/¯', '¯'); // ¯¯\_(ツ)_/¯¯

But it doesn't seem appropriate to move the existing behaviour to another name...

@stevebauman
Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants