0

出力 frpm から mySQL クエリを受け取り、それをフォーマットして返すクラスを作成しました。

クラスは次のとおりです。

<?php 
class sql_output_two_rows extends sql {

    function __construct($sql) {
        $this->sql = $sql;
        $this->output = "";
        parent::__construct($this->sql);
        $this->output .=  "<table class='tablenarrow bordered'>\n";
        $this->output .= "<tr>\n";
        for ($f = 0; $f < $this->num_fields; $f++) {
            if($f%($this->num_fields/2) == 0){
                $this->output .=  "<tr>\n";
            }
            if($f>0 && $f%($this->num_fields/2) != (($this->num_fields/2) - 1) || $f == ($this->num_fields - 1)){
                $this->output .= "<th style='border-radius:0px;'>".$this->field_name[$f]."</th>\n";
            }else{
                $this->output .= "<th>".$this->field_name[$f]."</th>\n";
            }
            if($f%($this->num_fields/2) == (($this->num_fields/2) - 1) ){
                $this->output .=  "</tr>\n";
            }
        }
        $this->output .="</tr>\n";
        for ($r = 0; $r < $this->num_rows; $r++) {
            for ($f = 0; $f < $this->num_fields; $f++) {
                if($f%($this->num_fields/2) == 0){
                    $this->output .=  "<tr style='background:#dbe1ef;'>\n";
                }
                $this->output .= "<td>\n";
                if($this->row_array[$r][$f] == ""){
                    $this->row_array[$r][$f]="&nbsp;";
                }
                $this->output .= $this->row_array[$r][$f];
                $this->output .= "</td>\n";
                if($f%($this->num_fields/2) == (($this->num_fields/2) - 1) ){
                    $this->output .=  "</tr>\n";
                }
            }
            $this->output .=  "<tr>\n";
            $this->output .= "<td colspan = '".($this->num_fields/2)."'>\n";
            $this->output .= "<hr>\n";
            $this->output .= "</td>\n";
            $this->output .=  "</tr>\n";
        }
        $this->output .= "</table>\n";
        // print $this->output;
        return($this->output);
    }
}
?>

クラスの最後の 2 行に注目してください。

出力を出力する行をコメントアウトしました。その行のコメントを外すと、次のようにクラスを呼び出します。

new sql_output_two_rows("select * from accounts limit 10");

それはうまく印刷されます。

ただし、そのままにして、次のように呼び出すと:

$output = new sql_output_two_rows("select * from cameron.accounts limit 10");

print $output . "\n";

次に、次のエラーが表示されます。

Object of class sql_output_two_rows could not be converted to string

これを克服するには、この機能をクラスに追加する必要があります。

 public function __toString(){

    return $this->output;

}

私の質問は次のとおりです。1つを機能させるために何が起こっていますか-つまり、クラスから印刷するとき-そしてもう1つを機能させない-つまり、出力を返すとき。

私は十分に明確であることを願っています。

4

2 に答える 2

1

印刷する代わりに、これを書くための別のより意味のある方法を印刷$outputする必要があります:$output->output

$sqlOutput = new sql_output_two_rows("select * from accounts limit 10");
print $sqlOuput->output;

これが機能する理由は、現在書かれているように、$output には $output の属性を持つオブジェクトsql-output_two_rowsへの参照が含まれているためです。PHP では、-> 矢印を使用してオブジェクト属性にアクセスします。すなわち:$output->output

于 2013-08-26T05:41:55.973 に答える