Почему в простой функции, не перезаписывается переменная?

В PHP, переменные могут быть перезаписаны внутри функции, если используется оператор присваивания (=). Однако, если переменная не перезаписывается внутри функции, есть несколько возможных причин:

1. Область видимости переменной: Если переменная объявлена внутри функции, она будет иметь локальную область видимости и будет доступна только внутри этой функции. Это означает, что любые изменения переменной внутри функции не будут влиять на ее значение вне этой функции.

Пример:

function test() {
  $variable = 10;
  echo $variable; // Выводит 10
}

test();
echo $variable; // Выводит Notice: Undefined variable: variable

2. Передача по значению: По умолчанию, аргументы в PHP передаются по значению, что означает, что при передаче аргумента в функцию, копия значения этого аргумента создается внутри функции, и любые изменения, которые вы делаете с этой копией, не влияют на исходный аргумент.

Пример:

function test($variable) {
  $variable = 20;
  echo $variable; // Выводит 20
}

$variable = 10;
test($variable);
echo $variable; // Выводит 10

3. Использование ключевого слова global: Если вы хотите изменить значение переменной, объявленной вне функции, внутри этой функции, вы должны использовать ключевое слово global, чтобы указать на глобальную область видимости переменной.

Пример:

$variable = 10;

function test() {
  global $variable;
  $variable = 20;
  echo $variable; // Выводит 20
}

test();
echo $variable; // Выводит 20

4. Возвращение значения из функции и перезапись переменной вне функции: Если вы хотите, чтобы функция возвращала значение, которое может быть присвоено переменной, вы можете использовать оператор return, чтобы вернуть значение из функции и присвоить его переменной снаружи функции.

Пример:

function test() {
  $variable = 20;
  return $variable;
}

$variable = 10;
$variable = test();
echo $variable; // Выводит 20

В итоге, перезапись переменной в PHP функции зависит от ее области видимости, способа передачи (по значению или по ссылке) и использования ключевого слова global. Если переменная находится внутри функции и не объявлена с использованием ключевого слова global, то любые изменения переменной будут ограничены локальной областью видимости функции и не будут влиять на ее значение вне функции.