Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вопрос по классу


Автор: izOne 22.1.2004, 16:47
Код

class blocks{
   var $bout   = array();
   var $berr   = array();
   var $blck   = array();
   var $btable = "blocks";
   var $html   = "";
   var $tmpl   = array();

   function binit(){
       $num = func_num_args();
       if($num >= 1){
           for($i=0; $i<$num; $i++){
               $block = func_get_arg($i);
               if(!in_array($block, $this->blck)){
                   array_push($this->blck, $block);
               }
               return true;
           }
       }else{
           array_push($this->berr, "Нет блоков для инициализации");
           return false;
       }
   }

   function bget($module = "index"){
       $query = db_query("SELECT * FROM blocks WHERE module='".$module."' ORDER BY position, weight");
       if($rs = db_fetch_array($query)){
           do{
               if($this->bparse($rs['type'], $rs['from'], $rs['name'])){
                   $this->bout[$position] .= $this->html;
               }else{
                   array_push($this->berr, "Невозможно пропарсить блок");
               }
           }while($rs = db_fetch_array($query));
           return true;
       }else{
           return false;
       }
   }
   
   function bparse($type, $from, $name){
       if(empty($this->tmpl[$type])){
           $this->tmpl[$type] = _readfile(_SITE_PTMD."blocks/tmpl/".$type.".htm");
       }
       include_once(_SITE_PTMD.$from."/blocks/index.php");
       $function = $from."_blocks_".$name;
       if(function_exists($function)){
           $function($rs);
           $tmp = $this->tmpl[$type];
           foreach($rs AS $k => $v){
               $tmp = str_replace("{_BLOCKS_".strtoupper($k)."}", $v, $tmp);
               $this->html = $tmp;
           }
           echo $tmp;
       }
       return true;
   }
}
?>


Если на третьей строчке снизу не ставить return true; - скрипт работает, но от финкции bparse требуется возвращение либо true, либо false. В чем я ошибся?

Автор: arial 22.1.2004, 19:02
Вылетает Apache confused.gif

Автор: MuToGeN 23.1.2004, 10:17
Разбираться лень, но чувчтвую, что причина тут - бесконечный цикл и глюк с таймаутами выполнения скрипта.

Автор: Гость_IZ@TOP 23.1.2004, 14:00
Интересно, а откуда взялся $rs в функции bparse ? Конечно не зависнуть ... как можно в foreach перебирать несуществующий массив ... или Я что то не разглядел*?

Автор: izOne 24.1.2004, 00:54
Уже разобралсяsmile.gif
Проблема была в строчке $this->bout[$position] .= $this->html; которая теперь выглядит следующим образом $this->bout[$rs['position']] .= $this->html;
$position не была определена ранее, и поэтому, наверное, вылетала ошибка...

2Гость_IZ@TOP, $rs - результат работы функции в подключаемом php-скрипте

Цитата
function qwerty(&$rs){
...
$rs = array();
...
}


Спасибо за ваши ответы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)