PHP 4.0 Bug #7763 Updated: strrpos returns unclear value
| From: | timo at fi-web dot de | Date: | Sun, 12 Nov 2000 00:11:48 +0000 |
| Subject: | PHP 4.0 Bug #7763 Updated: strrpos returns unclear value | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-37788@lists.php.net to get a copy of this message | ||
ID: 7763
User Update by: timo@fi-web.de
Status: Open
Bug Type: Unknown/Other Function
Description: strrpos returns unclear value
Actually, the function works as expected, but the documentation lacks the little comment about the
three equal signs found in the documentation for strpos. An additional note in the predefined
constants section about FALSE is defined as ZERO would be helpful, too. Unfortunately, I don't
have CVS access so I can't do the changes myself.
Previous Comments:
---------------------------------------------------------------------------
[2000-11-11 19:07:05] timo@fi-web.de
Actually, the function works as expected, but the documentation lacks the little comment about the
three equal signs found in the documentation for strpos. An additional note in the predefined
constants section about FALSE is defined as ZERO would be helpful, too. Unfortunately, I don't
have CVS access so I can't do the changes myself.
---------------------------------------------------------------------------
[2000-11-11 19:06:58] torben@php.net
S'pose I should close it now...:)
---------------------------------------------------------------------------
[2000-11-11 19:06:21] torben@php.net
Not a bug. If the found string occurs at the first position
in the string, that position will be 0, as you noted. 0 is
a false value, so '0 == false' is true.
There are various ways around this. One is to use the
PHP 4-only 'identical' operator, ===. This tests to make
sure that the operands are both equal and of the same type.
$haystack = "/test";
$needle = "/";
$position = strrpos($haystack, $needle);
if ($position === false) {
echo "Not found";
} else {
echo "Found at position $position";
}
Another is to do something like:
$position = strrpost("x$haystack", $needle);
...which would force any found strings to be at least
at position 1.
Check out the manual pages on Type Juggling and Operators
for more information.
http://www.php.net/manual/language.types.type-juggling.php
http://www.php.net/manual/language.operators.comparison.php
---------------------------------------------------------------------------
[2000-11-11 18:49:46] timo@fi-web.de
The following code doesn't work as expected:
$haystack = "/test";
$needle = "/";
$position = strrpos($haystack, $needle);
if ($position == false) { echo "Couldn't find $needle"; }
It seems that strrpos returns false, even if the position of the needle was 0 (It is the first
position in the string, isn't it?). strrpos should return 0 if the needle was found in haystack
at position 0 and FALSE if the needle wasn't found. Additionally, strrpos also returns 0 if the
needle wasn't found in haystack. Maybe FALSE and 0 are defined as the same in that context?
IMHO, 0 and FALSE should be defined different, or strrpos should NOT return a value (like unset) if
the needle wasn't found in haystack.
Regards
Timo
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=7763