answer to your 2 question: yes if you want the array to be passed from function2 to function1 and then be returned by function1, if will need to use reference all the way.
answer to your 1 question, if you want to create the object inside a function and return it to the caller, you need function to return reference, but you can use a difference approach like this:
page1
//create the array before calling function2
// and pass it as a reference.
$arr = array();
function2($qr,$arr);
echo arr[0][0]
page2
function2(&$qr, &$arr)// $qr can be passed either as reference or value
{
$arr = mysql_fetch_array($qr);
return $arr
}
in my opinion, use reference parameter is better than use reference function.