Re: [Discussion] is_string(), string type and objects implementing __toString()
| From: | Fleshgrinder | Date: | Thu, 09 Mar 2017 19:55:46 +0000 |
| Subject: | Re: [Discussion] is_string(), string type and objects implementing __toString() | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-98462@lists.php.net to get a copy of this message | ||
On 3/9/2017 8:51 PM, Rowan Collins wrote:
> On 09/03/2017 17:37, Fleshgrinder wrote:
>> On 3/9/2017 3:18 AM, Stanislav Malyshev wrote:
>>
>>> I don't think it's right approach. is_* functions check the current type
>>> of the value, not whether it can be converted to another type. If we
>>> need ones that express the latter, we should have different functions.
>>>
>>> Also, as already noted, having __toString doesn't mean it returns
>>> something useful.
>>>
>> This is not true at all:
>>
>> 1. is_dir
>> 2. is_executable
>> 3. is_file
>> 4. is_finite
>> 5. is_infinite
>> 6. is_link
>> 7. is_nan
>> 8. is_readable
>> 9. is_resource (checks the resource's type too)
>> 10. is_uploaded_file
>> 11. is_writable
>
> I think a good example is "is_callable", which evaluates not the *type*
> of the value, but the *possible behaviour*. You could think of
> Closure::fromCallable($foo) as "cast $foo to Closure", in which case
> is_callable($foo) is "can $foo be cast to Closure?" (at least, in it's
> default behaviour).
>
> This is then much more similar to defining is_stringable($foo) to return
> true for everything that can be cast to string.
>
> Regards,
>
I also forgot about is_numeric which checks the content of a string. ;)
--
Richard "Fleshgrinder" Fussenegger