\\R\\N
2014-05-13 15:22:39 UTC
Greeting guys,
I got a problem on checking and getting a string with multi dim index (like
['blablabla']['blabla']). It confusing me, so I think I need to found an
answer to clear myself.
First of all, I known that is wrong to get something from a string using a
multi dim index or even a string index. I did it by mistakenly set a wrong
parameter. The parameter supposed to be array with string as index (That
will actually be a hashmap), but I setted a string on it.
As result, I got a warning raised: Illegal string offset.
It's normal since I use the string as index to attempt to getting something
from a string. But the strange thing is, I did the isset check before use
the index. It supposed to be hot pass the check, but it did.
So I made a shorter test here:
https://gist.github.com/raincious/682ba152dbd74537e323#file-stringisset-php
The test 1 is what I used in my application, it checks if the array index is
set and not empty in same time. A valid param for it should be like this:
$string = array(
'check' => 'yes',
); // Please ignore the variable name
But when the $string truly turned to a string, it become the source of my
question.
Please notice that, on document:
http://www.php.net/manual/en/function.isset.php says, "Checking non-numeric
offsets of strings now returns FALSE." since 5.4, and I using 5.5.
So the test 3 (isset($string['check']) one) running as expected, it returns
false. However, the test1 (isset($string['check'][0]) one) is unfortunatly
not, It actually returnning true.
I'm not a experter of PHP and I even need other people's help to read PHP
source code, but in the information from the document and the talking with
other people gives me some guts to guess the $string['check'][0] actually
will be converted into $string[(int)'check'][0] and then into $string[0][0],
so the test 1 can be pass. Is that right?
So, what I want to know is, why there has two kind of behaviour for isset?
Maybe it's better to let the isset($string['check'][0]) and
isset($string['check']) both return false?
And sorry for my english, please ask if you confused by me.
Thank you,
R
I got a problem on checking and getting a string with multi dim index (like
['blablabla']['blabla']). It confusing me, so I think I need to found an
answer to clear myself.
First of all, I known that is wrong to get something from a string using a
multi dim index or even a string index. I did it by mistakenly set a wrong
parameter. The parameter supposed to be array with string as index (That
will actually be a hashmap), but I setted a string on it.
As result, I got a warning raised: Illegal string offset.
It's normal since I use the string as index to attempt to getting something
from a string. But the strange thing is, I did the isset check before use
the index. It supposed to be hot pass the check, but it did.
So I made a shorter test here:
https://gist.github.com/raincious/682ba152dbd74537e323#file-stringisset-php
The test 1 is what I used in my application, it checks if the array index is
set and not empty in same time. A valid param for it should be like this:
$string = array(
'check' => 'yes',
); // Please ignore the variable name
But when the $string truly turned to a string, it become the source of my
question.
Please notice that, on document:
http://www.php.net/manual/en/function.isset.php says, "Checking non-numeric
offsets of strings now returns FALSE." since 5.4, and I using 5.5.
So the test 3 (isset($string['check']) one) running as expected, it returns
false. However, the test1 (isset($string['check'][0]) one) is unfortunatly
not, It actually returnning true.
I'm not a experter of PHP and I even need other people's help to read PHP
source code, but in the information from the document and the talking with
other people gives me some guts to guess the $string['check'][0] actually
will be converted into $string[(int)'check'][0] and then into $string[0][0],
so the test 1 can be pass. Is that right?
So, what I want to know is, why there has two kind of behaviour for isset?
Maybe it's better to let the isset($string['check'][0]) and
isset($string['check']) both return false?
And sorry for my english, please ask if you confused by me.
Thank you,
R
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php