Hi:

  I think we are not talking about how to accomplish a function,  we
are talking about how to do it better

  and, in fact, I think strrev is need more cpu time and alloc space,
although they are very tiny :)

thanks

2011/8/15 Sebastian Krebs <sebastian.krebs.ber...@googlemail.com>:
>
>
> Am 14.08.2011 23:52, schrieb Rasmus Lerdorf:
>>
>> 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.
>
> Or just
>
>    if (strncmp(strrev('prefix_num'), 'mun', 3) === 0) {
>        // do something
>    }
>
>
>>
>> -Rasmus
>>
>
>
> Regards,
> Sebastian
>
> --
> 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

Reply via email to