Maybe a
#[\SuppressUndefinedWarning]

Parameter attribute could work, then everyone could implement their own
blank() function with their own preferred logic

Not sure if it's technically feasible tho, now the php engine would need to
inspect the parameter attributes before deciding on generating a warning or
not, idk how hard that would be.

On Sat, Apr 5, 2025, 22:27 Iliya Miroslavov Iliev <i.mirosla...@gmail.com>
wrote:

>
>
> On Sat, Apr 5, 2025 at 11:04 PM Rob Landers <rob@bottled.codes> wrote:
>
>> On Sat, Apr 5, 2025, at 14:15, Kayck Matias wrote:
>>
>> *INTRODUCTION*
>> This RFC proposes the addition of a new global function blank() to PHP’s
>> core, intended to provide a more intuitive and context-sensitive way of
>> checking for "blank" values. This function is *not a replacement* for
>> empty(), but a *complementary tool *to help developers more accurately
>> evaluate user input, query parameters, and form values — particularly in
>> situations where empty() may behave in unintuitive ways.
>>
>>
>>
>> *MOTIVATION*The motivation for this RFC arose from a real-world issue I
>> encountered at work involving query string filtering — specifically when
>> using the string "0" as a filter value. Because empty("0") evaluates to
>> true, the logic skipped this valid input, causing incorrect behavior in
>> the application. This highlighted a gap in PHP’s current toolset for
>> handling “blank” values in a more semantic and intention-aligned way.
>>
>>
>> I would personally advocate that empty() NEVER be used on strings. There
>> are too many edge cases. As I said in an earlier message on the thread, if
>> you want to know if a string is empty, just do $string == "" -- note the
>> double equals, not triple equals. This matches null, an actual empty
>> string, and false, but won't match anything else.
>>
>> *PROPOSAL*
>> The proposed blank() function will behave similarly to empty(), but with
>> semantics better suited for filtering, validation, and user input. Its
>> primary goals are:
>>
>>    -
>>
>>    To treat whitespace-only strings as blank (e.g., " ").
>>    -
>>
>>    To treat "0" (string zero) and 0 (int zero) as *not blank*, unlike
>>    empty().
>>    -
>>
>>    To support clearer, intention-driven logic when working with dynamic
>>    input, especially in query strings and HTTP forms.
>>
>> Function Signature
>>
>> function blank(mixed $value): bool;
>>
>> Logic (PHP version)
>>
>> function blank(mixed $value): bool
>> {
>>     if (
>>         false === $value ||
>>         (empty($value) && '0' != $value) ||
>>         (\is_string($value) && '' === \trim($value))
>>     ) {
>>         return true;
>>     }
>>
>>     return false;
>> }
>>
>> Examples
>> echo blank(null); // true
>> echo blank(false); // true
>> echo blank(""); // true
>> echo blank(" "); // true
>> echo blank([]); // true
>>
>> echo blank(0); // false
>> echo blank("0"); // false
>> echo blank("test"); // false
>> echo blank([0]); // false
>>
>>
>> I agree with most of these. I do not agree that " " (a space) is blank
>> though. For people without last names, this is often their last name to
>> pass validation on forms. As I said earlier, a simple loose check with an
>> empty string is usually all you need, not empty().
>>
>> Best Regards,
>> Kayck Matias ☕
>>
>>
>> — Rob
>>
>
> Just something that came into my mind. A "normal space" character is 32,
> "non-breaking space" is 160 and a "zero width space" is 8203. These are all
> characters so they are not blank and cannot be ignored
> --
> Iliya Miroslavov Iliev
> i.mirosla...@gmail.com
>

Reply via email to