Hi,

Doesn't substr_compare() accomplish the same thing since 5.1.0?

The only thing I couldn't figure out is how to make it case
insensitive without specifying an explicit value to $length


Best,
  Tjerk

On Mon, Aug 15, 2011 at 11:18 AM, Laruence <larue...@php.net> wrote:
> Hi:
>   compare to use substr,   strncmp supporting negative lenght can
> save a temp variable.
>
> thanks
>
> 2011/8/15 Rasmus Lerdorf <ras...@php.net>:
>> On 08/14/2011 02:37 PM, Rasmus Lerdorf wrote:
>>> On 08/14/2011 02:03 PM, Stas Malyshev wrote:
>>>> Hi!
>>>>
>>>> On 8/14/11 11:40 AM, Rasmus Lerdorf wrote:
>>>>> My main issue with changing strncmp/strncasecmp is that these are
>>>>> currently exact mappings of the underlying libc functions. For people
>>>>
>>>> And why should anybody care? 99% of people using PHP never used a libc
>>>> function and can hardly tell libc from gcc. If we can extend this
>>>> function with useful functionality, nobody cares about what libc does.
>>>>
>>>>> For example, I could imagine people writing code along these lines:
>>>>>
>>>>> $len = strlen($user_data) - strlen($suffix);
>>>>> if(!strncmp($user_data, $string, $len)) {
>>>>>     // do something
>>>>> }
>>>>
>>>> Warning doesn't fix the bug - and unless you're in 0.0001% of the
>>>> population that actually reads the logs daily and checks every message
>>>> there it would be little to help you. We should have more useful
>>>> functions, not more warnings. Warning won't make this code to work.
>>>
>>> I agree, however this change would potentially change the return value
>>> of the function. Before it would warn and not match. Even if you never
>>> saw the warning, at least length -1 would not give you a match. Now if
>>> the user data happens to end with the right character we now have a
>>> string match which is not at all what the code was written to do.
>>
>> Put more succinctly. Subtle BC breaks like this worry me. Any strncmp()
>> call with a computed length where that length may in some cases go
>> negative will now potentially return a match where it wouldn't before.
>> This would be very hard to track down. And the reason for introducing
>> this subtle BC break is so that you can rewrite:
>>
>>   if (substr("prefix_num", -3) == "num") {
>>        echo "they have same suffix\n";
>>   }
>>
>>
>> into:
>>
>>   if (strncmp("prefix_num", "num", -3) === 0) {
>>        echo "they have same suffix\n";
>>   }
>>
>> That doesn't seem like a big win to me.
>>
>> -Rasmus
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>
>
>
> --
> Laruence  Xinchen Hui
> http://www.laruence.com/
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>



-- 
--
Tjerk

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to