您好我试图用另一个函数回显函数的输出,我写了这段代码:
$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内。
答案 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语句中)或输出初始流,然后运行该函数,然后输出剩余的流。