从类的查询中获取值

时间:2013-08-16 01:20:04

标签: php

我开发了一个用于分页url友好的类,问题是你不能拉数组变量来定义数据库的值

private function query($page){

    $u = Url::getURL($page);
    $numreg = $this->max_reg; // Quantos registros por página vai ser mostrado

    if (!isset($u)) {
        $u = 1;
    }

    @$inicial = $u * $this->max_reg;
    $sql = mysql_query("SELECT * FROM {$this->table} ORDER BY id desc LIMIT $inicial, $numreg") or die(mysql_error());          
    $sql_conta = mysql_query("SELECT * FROM {$this->table}") or die(mysql_error());

    $out = '';

    while ($data = mysql_fetch_array($sql_conta)) {         
        $out.= $this->HTML;     
    }

    return print $out;      
}

到目前为止一切正常

问题:

global $data;
$p = new pagination;
$p->HTML    = '
                        <li> 
                            <div class="clbthumb"><a href="#"><img src="asset/images/noticias/news4.gif" alt="" /></a></div>
                            <div class="clbdes">
                                <p class="clbtitle"><a class="colr4" href="#">'.$data['titulo'].'</a></p>  
                                <p>'.$data['texto'].'</p>
                                <div class="clear"></div>
                                <div class="clbinfo">
                                    <ul>
                                        <li class="datetag">
                                            <span class="colr3">Data:</span> 
                                            <span class="pink padr">Tue, 26/01/11</span> 
                                        <li class="moreinfo"><a href="#">:: Ler Mais</a></li>

                                    </ul>
                                </div>
                            </div>
                        </li>';
$p->af_HTML = '
                    </ul>
                </div>';
$p->_build(2);

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您不能以这种方式访问​​在类中分配的变量。 您的使用中的$data变量(分配给HTML)无法访问(在您的第二部分代码中)。

如果您坚持从类外部设置HTML,则可以为每个变量的HTML添加占位符,然后在类中替换它们。

所以你的代码看起来像

(assuming class is pagination)

class pagination
    private function query($page){

        ...
        while ($data = mysql_fetch_array($sql_conta)) {         
            $out.= str_replace('##DATA_TITULO##', $data['titulo'] , $this->HTML, $out);
            $out.= str_replace('##DATA_TEXTO##', $data['texto'] , $this->HTML, $out);
        }
        ...
    }
}

,第二部分将是

$p = new pagination;
$p->HTML    = '... <a class="colr4" href="#">##DATA_TITULO##</a></p>  <p>##DATA_TEXTO##</p>...';

答案 1 :(得分:0)

$data需要在定义它的函数中声明为全局声明(以及在使用它的任何其他函数中声明)

private function query($page){
    global $data;
    ...
}

否则,您只设置一个本地范围的变量,该变量恰好也被命名为$data

如果您的pagination类具有html($data)函数以避免全局变量并确保从$data获取当前值,而不是最初设置$p->HTML时的值是什么。