Почему мои переменные выходят из сферы действия? PHP

Язык – это PHP 5.4 на сервере Apache 2.2. Это сценарий, который вызывается ajax.

$usr = new User(); function getMyName(){ echo $usr->username; } getMyName(); 

По какой-то причине $ name выходит за рамки. Почему это так? Я также попытался напрямую вызвать скрипт с тем же результатом. Я попробовал использовать ($ name) для разрешения, но это, видимо, работает только с анонимными функциями (закрытие)?

Когда я это делаю, это работает, но это смешно:

 $usr = new User(); $name = $usr->username; function getMyName($n){ echo $n; } getMyName($name); 

 $usr = new User(); function getMyName(){ global $usr; echo $usr->username; } getMyName(); 

альтернативно:

 $usr = new User(); function getMyName($usr){ echo $usr->username; } getMyName($usr); 

Это не смешно. Вот как должна работать переменная область видимости. Вам нужно передать переменную $ usr в качестве параметра функции, иначе она будет недоступна. Функции были разработаны для ввода и отправки результата / вывода. Вы должны придерживаться своего второго примера, вместо того, чтобы возиться с глобальными …

 $usr = new User(); $name = $usr->username; function getMyName($n){ echo $n; } getMyName($name); 

Вот цитата из Википедии:

В информатике подпрограмма, называемая также процедурой, функцией, подпрограммой, методом или подпрограммой, является частью исходного кода в более крупной компьютерной программе, которая выполняет определенную задачу и относительно независима от оставшегося кода.