> > > I don't think it needs to be added to the enum, necessarily. Just make it > a nullable argument to base64_decode. > > function base64_decode(string $string, bool $strict = false, ?DecodingMode > = null): string|false > > That would leave the default behavior of the function intact, but also > allows switching it over to either of the new modes (which would then just > defer to the new implementations). And we wouldn't need to deal with > "disallowed" modes on the new functions. > > Hi Larry,
The goal is not to change the signature of the existing `base64_encode` function, but rather to preserve its current non-strict behavior within the new API. This is intended to ensure a smoother transition from the existing API to the proposed one. Therefore, we shouldn’t alter or retrofit the existing function. Instead, the focus should be on providing a clear migration path for users, which is why the addition of a `DecodingMode::Unsafe` case is being proposed. If I were to follow your suggestion, I would have proposed an alternative signature like this: ``` base64_encode(string $string, bool|DecodingMode $strict = false); ``` Where: - `Encoding\DecodingMode::Strict` is identical to `$strict = true` - `Encoding\DecodingMode::Unsafe` would be identical to `$strict = false` and the current function would then become an alias of ``` Encoding\base64_decode(string $encoded, decodingMode: Encoding\DecodingMode::Unsafe); // or Encoding\base64_decode(string $encoded, decodingMode: Encoding\DecodingMode::Strict); ``` The caveat is that, in the new API, errors will throw exceptions instead of emitting an `E_WARNING` and returning `false`. Once the current API is eventually removed, the `Encoding\DecodingMode::Unsafe` mode would also be deprecated and removed accordingly. And documentation would rightly highlight the danger of using such settings. Keep in mind that this is in response to Rowan comment and depending on feedback I may not add the `Encoding\DecodingMode::Unsafe` to the proposal. I know I do not represent the majority but I tend to always use strict mode when decoding base64 encoded data and when I forget PHPStan reminds me to do so. Best regards, Ignace