Hi,

this is a plain design fault on your side:

<?php
    $a = 'this is not an array';

    if( is_array( $a['foo'] ) )
        print '1';
    
    [...]
?>

allright, just set $a to be a string, thats allright, now
you check wether an string-offset ( foo ) is an array or
not which causes an FATAL ERROR on PHP5.

Now if you wrote some clean code you would have done:

<?php

    $a = 'this is not an array';
    if ( is_array ( $a ) ) {
        if ( is_array ( $a['foo'] ) ) {
            print '1' ;
        }
    } else {
        print 'nope';
    }
?>

Now this makes sense as you first of all would make sure if $a is an
array and not start with the first index ( which doesn't exist as $a
is not even an array )

 -- red

PS: PHP5 says:
Fatal error: Cannot use string offset as an array in /www/htdocs
test_offset.php on line 6

[...]
> Hi
> 
> In PHP5 the behaviour of illegal string offsets has changed. This is
> documented in the 'thin changes' file.
> 
> This gives a problem in checking for existence / types of values,
> directly into a deeper level of a multidimensional array.
> 
> I reported this as a bug[1] because I find the behaviour unfortunate, and
> furthermore it's inconsistent. This was refused, with a note 'So don't
> do it'. I think it's a really bad idea not to check the
> existence/types of values, before using them, so how should this be done
> properly in PHP5, without risking fatal errors in the case of a
> non-existent array?
> 
> This is a problem in migrating applications from PHP4 because the
> error will not appear unless the value deosn't exist, which is exactly
> why you do the check.
> 
> [1] http://bugs.php.net/bug.php?id=28107
[...]

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

Reply via email to