PHP:能否防止函数输出到屏幕?

3

好的,我知道标题可能有点令人困惑,因为我无法想出一个好的解释方式。这里有一个函数,我无法访问它,它看起来像这样:

<?php function myFunction() {
?> '<img src="one.jpg" />';
<?php } ?>

每次调用该函数时,它都会输出img标签。但是如果我想在输出到屏幕之前操纵img标签怎么办?这可行吗?

我想先将其赋值给一个变量,进行操作,然后再将其输出。就像这样:

$image_src = myFunction();
$image_src = preg_replace('/s.*"/', $image_src);
echo $image_src;

这种情况是否可能?
2个回答

13

使用输出缓冲

ob_start();
myFunction();
$output = ob_get_clean();

执行完后,$output 变量将包含在函数内部被回显的 HTML 内容。


同时检查ob_get_contents()以及当您向ob_start()提供回调参数时会发生什么。 - ZJR
谢谢回复,但是输出缓冲是唯一的方法吗? - user381800
@Rick 是的,因为你无法访问该函数(因此无法将echo更改为return),这是唯一的方法。 - Paul
抱歉 - 如果函数内的语句不是回显,那么这仍然有效吗? - user381800
你可以不使用输出缓冲,通过编写一个小的PHP脚本来执行该函数,然后从第一个脚本中使用exec调用该脚本。这样做效率低下,但是可以在不使用输出缓冲的情况下实现。 - Alasdair

1

我是php的新手,我做的第一件事就是创建一个通用函数,将一行输出到html:

function html_line ( $string ) // echo line to browser
{
  echo PHP_EOL . $string . PHP_EOL;
}

然后我为简单段落和图像编写了函数,这些函数添加html标签,例如:

function html_pp ( $string ) // echo paragraph to browser
{
  html_line ( '<p>' . $string . '</p>' );
}

在调用这些函数之前,您可以使用其他函数和变量来任意操作内容:

function html_page ( $str_title, $str_content ) // simple page with title and body
{
  html_line ( '<html>' );
  html_line ( '<head>' );
  html_line ( '<title>' . $str_title . '</title>' );
  html_line ( '</head>' );
  html_line ( '<body>' );
  html_pp ( $str_content );
  html_line ( '</body>' );
  html_line ( '</html>' );
}

function html_test () // set some variables and create a test page
{
  $test_title = 'PHP Test';
  $test_msg = 'Hello World!';
  html_page ( $test_title, $test_msg );
}

我不确定这是否回答了你的问题,但对我来说它运行良好,可能是一个很好的起点。如果你决定像我一样将函数分离到不同的文件中,请确保有正确的包含调用,并且函数将具有来自调用者的全局范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接