Начнем с понятия области видимости функции, функция видит только переменные созданные внутри ее тела, либо переданные через ее параметры (аргументы). Других для нее просто не существует.
Все переменные переданные в функцию через ее параметры (аргументы), могут быть переданы в функции несколькими способами, если это простой скалярный тип (число, строка, массив), то они передаются по значению, т.е значение переданной переменной копируется в аргумент этой функции и это значение становится доступно внутри функции по названию ее аргумента, и т.к была передача по значения, то внешняя и локальная переменная больше ни как не связаны с друг-другом.
передача по ссылки (можно только переменные), перед объявлением переменной в параметры функции ставится знак &, это означает, что теперь будет передача в функцию не по значению, как выше, а по ссылки. т.е не будет ни какой копии значения, а будет реальная ссылка на внешнюю переменную, и это означает, что любые изменения локальной переменной внутри функции будут на самом деле изменять данные внешней переменной, более наглядно на примерах ниже...
Теперь более подробнее про переменные внутри функции и ее параметры.
Грубое говоря (прошу не пинать),
Все параметры функции, что объявлены в (), ничем не отличаются от переменных объявленных внутри функции, за одним исключением, что в переменную объявленную, как аргумент функции, можно передать значение из вне (оно может, быть строкой, числом, объектом, другой функций и т.д), а переменную объявленную внутри тела функции, вы не как не сможете изменить из вне (ну конечно если она не является глобальной, ну это совсем другая история);
Так что если у вас объявлена переменная $name, вне функции, а в самой функции или ее аргументе объявленная переменная с таким же именем, то они НИ как не пересекутся, т.к у внешних и внутренних переменных разная область видимости, за исключением передачи по ссылки, как описано выше.
Пример 1 (передача по значению)
$name = 'Вася';
function u($name)
{
echo $name;
$name = 'Коля';
}
echo u($name); // результат Вася
echo $name; // результат Вася
В первом примере получились такие результаты, т.к идет передача по значению и внешняя и локальная переменная ни как не связаны с друг другом.
Пример 2 (передача по ссылке)
$name = 'Вася';
function u(&$name)
{
echo $name;
$name = 'Коля';
}
echo u($name); // результат Вася
echo $name; // результат Коля
Во втором примере получились такие результаты, т.к идет передача по ссылки и локальная переменная теперь указывает на внешнюю переменную и все изменения локальной на самом деле изменять внешнюю, т.к локальная в данном случаи является лишь ссылкой.
P.S Объекты (экземпляры класса) всегда передаются по ссылки не зависимо от значка &.