Fluent strings, and the helper chain that reads forwards

A string transformation was a nest of function calls read from the inside out, and the order of arguments differed between them.

// before
$slug = Str::slug(Str::limit(Str::lower(trim($title)), 60));

// 7.0
$slug = Str::of($title)->trim()->lower()->limit(60)->slug();

// and it is lazy about nothing — each call returns a new Stringable
$parts = Str::of($path)->after('/api/')->explode('/');

Reading left to right in the order the operations happen is the whole benefit, and it is a large one for anything more than two calls deep. The object is a Stringable, so it can be passed anywhere a string is accepted and casts implicitly — which means a method that returns one is not returning a string, and a strict return type will reject it. Calling __toString() or (string) at the boundary is the fix.