В классе все видно, а вне - пустота

  • Автор темы Perf2k2
  • Дата начала

Perf2k2

Guest
В классе все видно, а вне - пустота

Всем привет.
Образовалась небольшая проблемка.
Есть функция:
PHP:
function sql_exec($query,$mode,$arrname) {
$this->sql_query=$query;
$this->sql_res=@mysql_query($this->sql_query);

if(mysql_error())
 {
 echo "Произошла ошибка базы даннных. Если это повторится несколько раз, обратитесь к администрации сайта и сообщите текст ошибки.<p><small><b>Текст ошибки:</b> ".mysql_error()."</small>";
 exit();
 }

if($mode=="1")
 {$this->sql_arr[$arrname]=mysql_fetch_array($this->sql_res);}
elseif($mode=="2")
 {$this->sql_numrows=mysql_num_rows($this->sql_res);}
elseif($mode=="3")
 {
 $j=0;
 while($this->sql_arr[$arrname]=mysql_fetch_array($this->sql_res))
  {
  $this->sql_arr[$arrname][$j]=$this->sql_arr[$arrname];
  // Внимание. Вот здесь он выводит все нормально - без нареканий. Смотрите следующий код...
  echo $this->sql_arr[$arrname][$j]['comm_autor'].$j.$arrname;
  $j++;
  }
 }

$this->i++;
}
А вот когда я пытаюсь тоже самое вывести на экран вне класса:
PHP:
// Вставляем главный класс
require 'main.class';
$class=new cl_main;
.....
.....
$class->sql_exec("select br_news_comm.*, date_format(comm_date,'%d.%m.%Y, %H:%i') as comm_datef from br_news_comm where comm_news_id='".$_GET['nid']."'",3,"lc");
echo "-".$class->sql_arr["lc"][0]['comm_autor'];
То он мне выводит пустоту. В чем трабл может быть?
Версия ПХП - 4.3.10
 

Perf2k2

Guest
Хмм... что-то в $class->sql_arr['lc'] ничего нет. Опять же - если вне класса написать. Так какого хрена он мне тогда в классе все это выводит?
 

Perf2k2

Guest
Разумеется!

var $sql_query="";
var $sql_res="";
var $sql_arr=array();
var $sql_numrows="";

-~{}~ 05.03.05 15:07:

Вообще странно как-то... Такое впечатление, что больше в массив $sql_arr просто не влезают элементы :( Еще скажу на всякий пожарный, что сейчас в этом массиве уже есть элементы (два) - $sql_arr['5n'] и $sql_arr['in'], но они же по идее не должны ни на что влиять...
 

Perf2k2

Guest
Gas, все это давно прочитано и изучено. Я сейчас задаю конкретный вопрос по конкретной проблеме. Если не знаешь чем помочь, просьба не беспокоиться.

Специально для тебя - есть класс, с которым работает скрипт. В этом классе есть массив sql_arr, в котором хранятся другие массивы. К двум из массивов есть доступ со скрипта, использующего класс. К третьему нет. Причем в самом классе он вполне нормально видится. Вопрос: почему этот массив виден в самом классе ($this), но не виден через вызов из скрипта ($class). Может быть что-то не так сформулировал, но мне кажется суть ясна.
 

SiMM

Новичок
Perf2k2, специально для тебя - пора освежить всё в памяти и заняться своими прямыми программистскими обязанностями - отладкой. А телепаты - в отпуске.
 

Gas

может по одной?
Если бы всё было изучено, таких проблемм бы не было.
почему этот массив виден в самом классе ($this), но не виден через вызов из скрипта ($class)
И при чём тут база? Нужно показывать именно то, что не работает.
 

Perf2k2

Guest
А телепаты - в отпуске.
А не мог бы ты объяснить что тебе не понятно? Я с радостью все тебе расскажу и покажу, лишь бы ты мне помог с проблемой разобраться.
 

SiMM

Новичок
Perf2k2, включи вывод ошибок наконец. И фраза "выводит пустоту" абсолютно неинформативна.
И кстати послушай Gasа по поводу МИНИМАЛЬНОГО скрипта.
 

Perf2k2

Guest
Нужно показывать именно то, что не работает.
Ну ладно, попробую по-другому объяснить.
В первом коде пишу print_r($this->sql_arr['lc']);
PHP:
elseif($mode=="3") 
{ 
$j=0; 
while($this->sql_arr[$arrname]=mysql_fetch_array($this->sql_res)) 
  { 
  $this->sql_arr[$arrname][$j]=$this->sql_arr[$arrname]; 
  // Внимание. Вот здесь он выводит все нормально - без нареканий. Смотрите следующий код... 
  print_r($this->sql_arr['lc']);
  $j++; 
  } 
}
Потом, в скрипте (второй код) пытаюсь также принт_ром вывести тоже самое:
PHP:
$class->sql_exec("select br_news_comm.*, date_format(comm_date,'%d.%m.%Y, %H:%i') as comm_datef from br_news_comm where comm_news_id='".$_GET['nid']."'",3,"lc");

print_r($class->sql_arr['lc']);
В первом случае выводится содержимое массива, а во втором - нет. Так более понятно?
 

Gas

может по одной?
PHP:
while($this->sql_arr[$arrname]=mysql_fetch_array($this->sql_res))
не присваивай $this->sql_arr[$arrname]

-~{}~ 05.03.05 14:36:

на последней итерации оно обнуляется
 

Perf2k2

Guest
Gas
Все заработало. Ошибку понял. Спасибо :)
 
Сверху