我创建了一个类,它从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);
}
}
?>
注意班级的最后两行。
我已注释掉打印输出的行。如果我取消注释该行,那么我就这样调用该类:
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;
}
我的问题是:发生了什么事情 - 即当我从班级打印时 - 而另一个不打算 - 即当我返回输出时。
我希望我足够清楚。
答案 0 :(得分:1)
而不是打印$output
你应该打印$output->output
另一种语义方式来写这个:
$sqlOutput = new sql_output_two_rows("select * from accounts limit 10");
print $sqlOuput->output;
这是有效的原因是因为,正如当前所写的那样,$ output包含对对象 sql-ouput_two_rows的引用,其中属性为$ output。在PHP中,您可以使用 - &gt;访问对象属性。箭头。即:$output->output
答案 1 :(得分:0)
构造函数不能返回值。它们总是返回创建的对象。因此,您将获得$output
创建的class sql_output_two_rows
对象,而不是字符串。重构代码(可能是用于格式化的静态函数或为其创建额外函数)