ID:               21745
 User updated by:  [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Bogus
 Bug Type:         Scripting Engine problem
 Operating System: windows95
 PHP Version:      4.3.0
 New Comment:

function a($param=null){

        $fruit[0] = 'apple';
        $fruit[1] = 'orange';
        
        switch($param){
                case    'R':
                        return $fruit;
                        break;
                        
                default:
                        function aa(){
                                $fruit = a('R');
                                echo in_array('apple', $fruit) ? 'ok' : 'fail';
                        }

                        function ab(){
                                $fruit = a('R');
                                if(in_array('apple', array('apple', 'orange'))){
                                        echo 'ok';
                                } else {
                                        echo 'fail';
                                }
                        }
        }
}


a();
aa();
ab();
//aa(); // echo ok
//ab(); // echo ok

/*
finally, it works like the way i want... :)
wondering ? bug : bogus <= should change to 'less experience';
cause i using php less than 3 years... :) sorry.

anyway, i learn that 

file a.php
==========
function a(){
        
        $a = 'php';
        
        function ab(){
                echo $a; // doesn't work
        }
}

i understand that global apple is the $GLOBALS['apple'] and
i thought by using the global here, it would maybe means the
scope of function a(). anyway, i am wrong about that..

you might be wondering why i created a function like this?
em... this is to prevent the use of vars in the $GLOBALS scope
why, because i am writing a secure application.

if a people include a.php, then using the $GLOBALS, he can find out
what value in the vars.

anyway, i also think how to prevent people to include the a.php
or calling a()... emm... maybe u people can help me next time...

bogus = [adj] derog pretended; intentionally false: <= from
dictionary.

so u see, i am not intended to fool ur people...
so the status shouldn't be bogus...
i am learning and ur people are teaching... :)

May Allah bless all of us!.

sincerely,
Jimson Chang
*/


Previous Comments:
------------------------------------------------------------------------

[2003-01-19 06:10:20] [EMAIL PROTECTED]

Sorry, my assumption wasn't right at all.

The error is because $fruit is not initialised in the global
scope.

Try the following:

<?php
function a(){
        global $fruit;
        $fruit[0] = 'apple';
        $fruit[1] = 'orange';

        function aa(){
                global $fruit;
                
                (array) $fruit;
                echo in_array('apple', $fruit) ? 'ok' : 'fail';
        }
        
        function ab(){
                global $fruit;
                if(in_array('apple', array('apple', 'orange'))){
                        echo 'ok';
                } else {
                        echo 'fail';
                }
        }
}

a();
aa();
ab();
?>


------------------------------------------------------------------------

[2003-01-19 05:54:40] [EMAIL PROTECTED]

This problem turned out to be a problem of the scripting engine, rather
than of in_array(), that "global" declarations don't work in nested
functions.



------------------------------------------------------------------------

[2003-01-19 05:19:00] [EMAIL PROTECTED]

oops

It might be related that you have functions defined in functions. Can
you try without this?

Derick

------------------------------------------------------------------------

[2003-01-19 05:16:03] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

------------------------------------------------------------------------

[2003-01-19 05:14:29] [EMAIL PROTECTED]

// functions within functions scope
function a(){

        $fruit[0] = 'apple';
        $fruit[1] = 'orange';
        
        function aa(){
                global $fruit;
                
                (array) $fruit;
                echo in_array('apple', $fruit) ? 'ok' : 'fail';
        }
        
        function ab(){
                global $fruit;
                if(in_array('apple', array('apple', 'orange'))){
                        echo 'ok';
                } else {
                        echo 'fail';
                }
        }
}


a();
aa(); // echo fail and Warning: in_array() [function.in-array]: Wrong
datatype for second argument
ab(); // echo ok

// global scope

$country = array('japan', 'korea');

echo in_array('japan', array('japan', 'korea')) ? 'japan - ok' : 'japan
- fail'; // ok
echo '<br>';

echo in_array('japan', $country) ? 'japan -ok' : 'japan - fail'; // ok
echo '<br>';


// function scope

function t(){
        $country = array('Malaysia', 'Singapore');
        echo in_array('Malaysia', $country) ? 'Malaysia -ok' : 'Malaysia -
fail';
}
t(); // ok


/*
wondering ? bug : bogus;

looks like in_array() can't function well in
functions within functions scope..



May Allah bless all of us!.

sincerely,
Jimson Chang
*/

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/21745

-- 
Edit this bug report at http://bugs.php.net/?id=21745&edit=1

Reply via email to