Здравствуйте! Помогите, пожалуйста разобраться.
Есть функция, которая ищет в директории файлы, которые заканчиваются .txt и формирует их в выпадающее меню. Здесь всё работает как нужно. Но сейчас задача, добавить в <option значение selected, если переменная $file_name равна переменной $fileПроблема заключается в том, что переменная $selected которая находится в <option всегда пустая. Не потому что данного файла нет в директории, а потому что любая переменная после <option будет пустой. В общем, переменную $selected в <option что-то блокирует или очищает значение. Но я не могу разобраться что именно. Прошу помочь
PHP:
$file_name = «name_of_file»; function my_function(){ foreach (new DirectoryIterator(‘my_folder/’) as $file) { if ($file->isFile()) { echo « } } } }
В итоге сделал так:
PHP:
$file_name = «name_of_file»; function my_function(){ foreach (new DirectoryIterator(‘my_folder/’) as $file) { if ($file->isFile()) { if($md5file_name == $md5file){ $selected = ‘ selected’; } else { $selected = »; } echo «<!—$md5file_name == $md5file—> <option $selected value=»$md5file«>$file</option>»; } } } }Меня всё устраивает, но есть один нюанс.
Почему-то переменная $file_name = «name_of_file»; прописанная до function my_function() пустая, а если прописать её после function my_function() то всё ок. Почему так происходит и как задать значение переменной до функции?
www.php.net/manual/ru/language.variables.scope.php
$file_name определена вне функции, поэтому внутри функции она не видна. Надо добавить строку
PHP:
globala $file_name;в теле функции.
Петрович, свою глобалу сам себе добавь, не учи плохому с опечатками.
Объясни, а то не понятно)
1. «globala» нет такого в языке;
2. глобальные переменные — зло, хорошо, когда скрипт из 1-го файла и 20-ти строк, а если 1к файлов, с зоопарком глобалок будет один лишь геморрой.
Все понятно теперь объяснил, сразу все по местам стало)
А если серьезно, то аргументы слабоваты. В данном конкретном случае нет никаких скриптов, файлов и тем более 1К файлов. А есть функция и переменная, которая определена вне функции, то есть в глобальном пространстве имен. То есть глобальная переменная. И чтобы ее использовать в пространстве имен функции, ее нужно там определить. Это делается при помощи ключевого слова global. И да, этим нужно пользоваться осторожно, потому что глобальная переменная доступна к изменению внутри функции.
Еще ее можно передать в качестве параметра функции. Тогда не будет необходимости юзать глобальную переменную, так как параметр передается по значению. Просто не всегда есть возможность добавлять параметры функции. Надо смотреть по конкретной ситуации.
@Александр Петрович, сейчас кто-то ф-ции ещё использует, а не методы классов?
Вместо слова Пешеходы надо вставить Функции, а вместо Автомобилистов — Методы…

