Re: A little confusing thing on (mistakenly) geting a offset from string with multi dim index.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/13/2014 08:22 AM, \R\N wrote:
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?


What you are describing, and what is in your test script on github is extremely confusing. I'm still not sure what you think you are trying to accomplish with your tests.

Can you give us a real world example of what it is you are trying to do?



And sorry for my english, please ask if you confused by me.

Thank you,
R


--
Jim Lucas

http://www.cmsws.com/
http://www.cmsws.com/examples/

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php





[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux