Re: Setting a variable inside a function and making it global insideaninner function doesn't work?

From: Date: Wed, 12 Mar 2008 01:09:35 +0000
Subject: Re: Setting a variable inside a function and making it global insideaninner function doesn't work?
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-271323@lists.php.net to get a copy of this message
Shawn McKenzie wrote: > Lamonte wrote: >> Setting a variable inside a function and making it global inside an >> inner function doesn't work? >> >> Right well I have created this function: >> >> [code] >> function getForumChildrenTree( $id ) >> { >> $id = intval( $id ); >> $treeResult = array( >> 'topics' => array(), >> 'posts' => array(), >> 'forums' => array(), >> ); >> applyForumChildrenTree( $id ); >> } >> [/code] >> >> What this function does: Basically this function is set to an id of a >> forum id, then theres a variable that stores an array. Then theres a >> recursive function called "applyForumChildrenTree" to update the >> "treeResult" variable, but it's not exactly working. For some reason >> when I did print_r inside the "applyForumChildrenTree" the array is as >> applied: >> >> [quote] >> Array >> ( >> [forums] => Array >> ( >> [0] => 3 >> [1] => 8 >> [2] => 5 >> ) >> >> [topics] => Array >> ( >> [0] => 5 >> ) >> >> [posts] => Array >> ( >> [0] => 5 >> ) >> >> ) >> [/quote] >> >> Then inside the actual function "getForumChildrenTree" I tried >> outputting the "treeResult" array using "print_r" after the recursive >> function "applyForumChildrenTree" as follows: >> >> [code] >> function getForumChildrenTree( $id ) >> { >> $id = intval( $id ); >> $treeResult = array( >> 'topics' => array(), >> 'posts' => array(), >> 'forums' => array(), >> ); >> applyForumChildrenTree( $id ); >> print_r($treeResult); >> } >> [/code] >> >> and it showed me a blank array, (default array I created) as follows: >> >> [quote] >> Array >> ( >> [topics] => Array >> ( >> ) >> >> [posts] => Array >> ( >> ) >> >> [forums] => Array >> ( >> ) >> >> ) >> [/quote] >> >> Is this a bug? I'm using PHP 5.2.4 > > Well you haven't defined anything global in your code, unless you did > inapplyForumChildrenTree(), in which case it needs to be global > everywhere that you want to use it as global. > > Easiest way would just be to use it like this everywhere: > > $GLOBALS['treeResult'] = array( > 'topics' => array(), > 'posts' => array(), > 'forums' => array(), > ); > > -Shawn After a second look, probably a better alternate would be to have applyForumChildrenTree() return the array, then use $treeResult = applyForumChildrenTree( $id ); -Shawn

« previous php.general (#271323) next »