PHP 4.0 Bug #7763 Updated: strrpos returns unclear value
| From: | sniper@php.net | Date: | Sun, 12 Nov 2000 03:56:40 +0000 |
| Subject: | PHP 4.0 Bug #7763 Updated: strrpos returns unclear value | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-37797@lists.php.net to get a copy of this message | ||
ID: 7763
Updated by: sniper
Reported By: timo@fi-web.de
Status: Closed
Bug Type: Documentation problem
Assigned To:
Comments:
Documentation fixed for strrpos()
--Jani
Previous Comments:
---------------------------------------------------------------------------
[2000-11-11 19:11:48] 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: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
---------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view the rest of the comments,
please view the bug report online.
Full Bug description available at: http://bugs.php.net/?id=7763