グローバル変数を利用することは意図しない場所で値が更新され、不具合の原因になる可能性があります。
関数で何らかの処理を行い、その結果を受け取る場合は戻り値(返り値)を利用するべきです。
function test()
{
$test = 'test';
//returnで$testを呼び出したところへ返す
return $test;
}
//test()から返ってくる値を、$getTestで受け取る
$getTest = test();
var_dump($getTest);
追記
解決済みになっていますが、質問文にあるエラーについても調べてみました。
global宣言は、その関数の外側にある同名の変数を参照することを宣言するようです。
マニュアル
global宣言した関数内で初めて生まれた変数はその関数の外側からは参照できますが、別の関数からは参照できません。
laravelのコントローラ内での処理ということなので、global宣言している関数が別の関数から呼び出されているため、呼び出し側の関数で未定義になっているのではないでしょうか。
function test()
{
//「関数の外側」にある$testをこの関数内で使用することを宣言
//※実際にはこの時点で「関数外の$test」は未定義
global $test;
$test = 'test';
}
function test2(){
//test()の処理を呼び出す
test();
//test2()関数内で$testは未定義なので、出力はされない
//global宣言もされていないので、「関数外の$test」も参照しない
echo '[test2]'.$test;
var_dump($test);
}
//test2()の処理を呼び出す
test2();
//test2()が呼んだtest()によって、「関数外の$test」が定義されたので出力される
echo '[関数外]'.$test;
var_dump($test);