Не выводится значение переменной в

Здравствуйте! Помогите, пожалуйста разобраться.
Есть функция, которая ищет в директории файлы, которые заканчиваются .txt и формирует их в выпадающее меню. Здесь всё работает как нужно. Но сейчас задача, добавить в <option значение selected, если переменная $file_name равна переменной $file

Проблема заключается в том, что переменная $selected которая находится в <option всегда пустая. Не потому что данного файла нет в директории, а потому что любая переменная после <option будет пустой. В общем, переменную $selected в <option что-то блокирует или очищает значение. Но я не могу разобраться что именно. Прошу помочь :)

PHP:
  1. $file_name = «name_of_file»;
  2.  
  3. function my_function(){
  4. $exclude = array(«txt»);
  5. foreach (new DirectoryIterator(‘my_folder/’) as $file) {
  6.   if ($file->isFile()) {
  7.     $extension = pathinfo($file, PATHINFO_EXTENSION);
  8.     if(in_array($extension, $exclude)) {
  9.         if(md5($file_name) == md5($file)){$selected = ‘selected’;}
  10.         echo «
  11.    <option «.$selected .» value=»».md5($file).«»>$file</option>»;
  12.             }
  13.         }
  14.     }
  15. }
 

В итоге сделал так:

PHP:
  1. $file_name = «name_of_file»;
  2. function my_function(){
  3.     $md5file_name = md5($file_name);
  4.     $exclude = array(«txt»);
  5.     foreach (new DirectoryIterator(‘my_folder/’) as $file) {
  6.         if ($file->isFile()) {
  7.             $extension = pathinfo($file, PATHINFO_EXTENSION);
  8.             if(in_array($extension, $exclude)) {
  9.                 $md5file = md5($file);
  10.                 if($md5file_name == $md5file){
  11.                     $selected = ‘ selected’;
  12.                 } else {
  13.                     $selected = »;
  14.                 }
  15.                 echo «<!—$md5file_name  == $md5file—>
  16. <option $selected value=»$md5file«>$file</option>»;
  17.             }
  18.         }
  19.     }
  20. }

Меня всё устраивает, но есть один нюанс.
Почему-то переменная $file_name = «name_of_file»; прописанная до function my_function() пустая, а если прописать её после function my_function() то всё ок. Почему так происходит и как задать значение переменной до функции?

 

$file_name определена вне функции, поэтому внутри функции она не видна. Надо добавить строку

PHP:
  1. globala $file_name;

в теле функции.

 

Петрович, свою глобалу сам себе добавь, не учи плохому с опечатками.

 

Объясни, а то не понятно)

 

1. «globala» нет такого в языке;
2. глобальные переменные — зло, хорошо, когда скрипт из 1-го файла и 20-ти строк, а если 1к файлов, с зоопарком глобалок будет один лишь геморрой.

 

Все понятно теперь объяснил, сразу все по местам стало)
А если серьезно, то аргументы слабоваты. В данном конкретном случае нет никаких скриптов, файлов и тем более 1К файлов. А есть функция и переменная, которая определена вне функции, то есть в глобальном пространстве имен. То есть глобальная переменная. И чтобы ее использовать в пространстве имен функции, ее нужно там определить. Это делается при помощи ключевого слова global. И да, этим нужно пользоваться осторожно, потому что глобальная переменная доступна к изменению внутри функции.
Еще ее можно передать в качестве параметра функции. Тогда не будет необходимости юзать глобальную переменную, так как параметр передается по значению. Просто не всегда есть возможность добавлять параметры функции. Надо смотреть по конкретной ситуации.

 

@Александр Петрович, сейчас кто-то ф-ции ещё использует, а не методы классов?

 

[​IMG]
Вместо слова Пешеходы надо вставить Функции, а вместо Автомобилистов — Методы…

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *