通过变量调用函数

时间:2015-02-03 11:50:33

标签: php

您好我试图用另一个函数回显函数的输出,我写了这段代码:

$users = new user();
class user{
  public function userlist(){
    //Here is my sql action and then it send the result as output
    echo $output;
  }
}

现在我有一个包含网站模板的类,这个文件遍历每个页面。

$html = new html();
class html{
  public function output($output){
    //echoing some html styles and the template html code..
    echo '<div id="body">';
    $output;
    echo "</div>";
  }
}

现在$output应位于<div id="body">内的html页面中,问题是$output的HTML在div之前回显且不在div内。

3 个答案:

答案 0 :(得分:1)

简单的方法:

class user{
  public function userlist(){
    //Here is my sql action and then it send the result as output
    return $output;
  }
}

class html{
  public function output($output){
    //echoing some html styles and the template html code..
    echo '<div id="body">';
    echo $output;
    echo "</div>";
  }
}

class controller {
  function handler(){
    $users = new user();
    $html = new html();
    $html->output($users->userlist());
  }
}

现在无需修改user类,您可以使用输出缓冲来临时保存$users对象输出,然后在更方便的时间输出:

class user{
  public function userlist(){
    //Here is my sql action and then it send the result as output
    echo $output;
  }
}

class controller {
  function handler(){
    $users = new user();
    $html = new html();
    ob_start();
    $users->userlist();
    $output = ob_get_contents();
    ob_end_clean();
    $html->output($output);
  }
}

我不认为您可以在不修改html::output方法的情况下获得预期结果。

请参阅ob_*函数上的documentation以获取有关其语义的说明。

附录:请注意,许多框架已在内部使用输出缓冲。文档说明缓冲区是可堆叠的(即,您可以在另一个运行缓冲区之上启动新缓冲),但只需要小心地正确启动和结束缓冲区,以免弄乱框架内部状态(最终输出结果) ),如果你正在使用它。

答案 1 :(得分:0)

您还需要回显$ output

public function($output){
 //echoing some html styles and the template html code..
  echo '<div id="body">';
  echo $output;
  echo "</div>";
}

或只使用一个衬垫

public function($output){
  //echoing some html styles and the template html code..
  echo '<div id="body">'. $output . "</div>";
}

答案 2 :(得分:0)

您正在错误地访问变量。由于它是一个字符串,您只需在输出中附加或连接它,如下所示:

class html{
public function($output){
    //echoing some html styles and the template html code..
    echo '<div id="body">'.$output."</div>";
    }
}

此外,在第一个函数中,您只需输出$ output的值,而不是实际将其保存到变量中。如果要按顺序显示内容,则应将数据保存到可在其他地方正确访问的变量(例如在return语句中)或输出初始流,然后运行该函数,然后输出剩余的流。