Как использовать внешнюю переменную Внутри цикла For (Область действия)

#php #variables #scope

Вопрос:

Простой вопрос, на который я нигде не видел ответа:

Как я могу использовать внешнюю $variable , внутреннюю for петлю?

В моем PHP-коде у меня SplDoubleyLinkedList полно имен друзей, и я просматриваю их одно за другим, чтобы использовать в if инструкции, которая сравнивает текущего друга с параметром $friend name. Как я могу изменить или сориентировать $idx переменную так, чтобы она отображалась в цикле и операторе if?

Это не вопрос , связанный с SplDoubleyLinkedList этим, скорее это просто scoping вопрос .

 <?php

  function removeFriend($friendsList, $friend)
  {
    $idx = null; //how can I set this index variable from the inside of the for loop?
    for ($friendsList->rewind(); $friendsList->valid(); $friendsList->next()) {
      if($friendsList->current() === $friend){
        $idx = $friendsList->key(); //"$idx is declared but not used."
      }
    }
  }

?> 

Это обобщенный пример моей проблемы:

 <?php

function test()
  {
    $test = 0; //how can I set this index variable from the inside of the for loop?
    for ($i = 0; $i < 10; $i  ) {
      $test = 1; //"$idx is declared but not used."
    }
  }
  
 ?> 

Если эта точная функция помещена в файл JS, она не показывает это предупреждение «$idx объявлен, но не используется».

Комментарии:

1. Для циклов в PHP нет отдельной области. Все переменные вне цикла также доступны внутри. Поправьте меня, если я ошибаюсь, но сообщение «$idx объявлен, но не используется». просто отображается вашей IDE? Это указывает $idx на то, что в него записывается, но никогда не читается, поэтому переменная не имеет никакого смысла.

2. @vixducis Фактически используется в качестве внутренней переменной. Является ли PHP просто другим в этом смысле?

3. Нигде в вашем коде $idx это не читается. Если вы добавите, например echo $test , в свой код, предупреждение исчезнет.

4. @vixducis Тогда ответ прост, PHP требует, чтобы переменная использовалась для устранения этого предупреждения. В JS это не так (откуда я родом). Ответ на этот вопрос: PHP отличается от JS, потому что PHP требует, чтобы переменная считывалась, чтобы это предупреждение не возникало, тогда как в JS переменная может быть либо записана, либо прочитана и не будет отображать это предупреждение.

5. @vixducis Спасибо за разъяснение, я исправлю это в ответе.

Ответ №1:

Ответ прост и обусловлен различиями между JavaScript и PHP в моей среде разработки VSCode и Intellisence.

IDE: VSCode

Intellisence: Расширение VSCode PHP Intelephence

В PHP: Переменная должна быть, по крайней мере read , для устранения предупреждения «$idx объявлен, но не используется».

В JS: Переменная должна быть либо по крайней written мере, либо read для устранения предупреждения «$idx объявлен, но не используется».