出力 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]=" ";
}
$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つを機能させない-つまり、出力を返すとき。
私は十分に明確であることを願っています。