#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 объявлен, но не используется».