2014-09-16 3 views
0

Мне интересно, есть ли способ получить значение переменной, которая была определена в цикле внутри функции?php variable scope внутри цикла в функции

Переменные, объявленные в цикле/if-then-else и т. Д., Имеют ограниченную область действия (только внутри этих блоков)?

вот пример функции:

<?php 

function getComments($tabName) { 
    $sql = "select 
       a.owner, 
     a.table_name, 
     a.column_name, 
     a.data_type, 
     a.data_length, 
     a.data_precision, 
     b.comments 
      from 
       all_tab_columns a, 
     user_col_comments b 
      where 
       a.TABLE_NAME = b.table_name 
     and a.COLUMN_NAME = b.column_name 
     and a.owner = 'CORE' 
     and a.table_name ='" . $tabName . "' 
      order by 
       a.column_id"; 
    $stid = oci_parse(getConnect(), $sql); 

    // runs the query above     
    oci_execute($stid); 
    while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) { 
     foreach ($row as $column => $entry) { 
      // Column name 
      if ($column == 'COLUMN_NAME') { 
       $output = "this is a column"; 
      } 
     } 
    } 

    return $output; 
} 

И вот я получаю «Undefined переменной: выход» ошибка.

Если я поставил эхо вместо переменной $output, я получаю результат.

Это потому, что $output scope? Как я могу получить значение $output в моем возвращении?

+1

Кажется, что 'переменных $ output' не создаются потому, что если- условие не было выполнено. Вы должны начать с '$ output = '';' в верхней части своей функции, чтобы избежать этой проблемы. – sjagr

+0

спасибо за подсказку. Однако, когда я пытаюсь $ output = "" в начале, я просто получаю пустой результат в выходе. Он остается неизменным. – Bebus

+1

Наряду с предложением @ ion использовать '$ output. = 'Это столбец';', вы все равно должны изучать ваш if-statement, потому что он явно не выполняется. Вам нужно выяснить, почему этого не происходит. – sjagr

ответ

1

пытается удовлетворить это условие

 if ($column == 'COLUMN_NAME') { 
      $output = "this is a column"; 
     } 

, а также и может попытаться вернуться сразу после ур состояния

 if ($column == 'COLUMN_NAME') { 
      return "this is a column"; 
     } 
+0

Если я вернусь сразу после условия, он показывает пустой результат. Кажется, что он возвращается только за пределами if/then/else и блоков цикла – Bebus

+0

, это была ошибка в моей логике подключения/оператора sql, так как я получил «ложь» при извлечении данных. – Bebus