- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 PHP 中,有时我会看到这个:
$html = <<<HTML
<p>Hello world</p>
HTML;
通常我会使用 ob_start() :
ob_start();
?>
<p>Hello world</p>
<?php
$html = ob_get_contents();
ob_clean();
你能告诉我这两种写入缓冲区的方式有什么区别和优势吗?
最佳答案
$html = <<<HTML
<p>Hello world</p>
HTML;
// equivalent:
$html = "<p>Hello world</p>";
这使用了 PHP string Heredoc syntax ,这是一种编写字符串的语法,类似于使用单引号和双引号,但以某种不同的方式转义。您可以使用 {}
直接向其中插入一些 PHP 字符串。
<?php
ob_start();
?>
<p>Hello world</p>
<?php
$html = ob_get_clean();
这是完全不同的事情。它利用 PHP output buffering control捕获 PHP 代码块中不的内容。就像在给定的示例中一样,<p>Hello world</p>
写在 PHP 代码块之外,应该是立即输出给客户端。启用输出缓冲后,它们存储在 PHP 的缓冲区中,以便以后可以使用 ob_get_contents()
检索它。或 ob_get_clean()
.如果你需要插入任何 PHP 变量,你需要使用 <?=$blah?>
甚至 <?php echo $blah?>
.
一些CMS使用输出缓冲控制功能来管理内容和模块。一个例子是 Joomla。这种设计的好处是,每当模块需要将内容放置到它的预留空间时,它可以简单地使用 echo
使内容可用。这可以简化从模块中获取内容的方式,不需要实现特定的函数调用或分配给特定的变量,这使得系统更易于管理。
<?php
ob_start();
include dirname(__FILE__)."/content.php";
$content = ob_get_clean();
output_document(array("body"=>$content));
我还利用输出缓冲功能,这样我就可以在顶部包含一个文件,并且在最后没有任何 PHP 我可以创建一个简单的模板系统,但这有点离题。
关于PHP:<<< 与 ob_start,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455517/
使用 ob_start() 和 ob_start('ob_gzhandler') 有什么区别? 它如何影响页面速度? 最佳答案 这不会像您想象的那样影响页面速度。 ob_gzhandler是一个回调函
我正在做一些关于从 php 最小化 html 的研究。喜欢 class themeing { function render( $file, $folder ) { i
我正在使用以下代码: PHP: // Generate Guid function NewGuid() { $s = strtoupper(uniqid(rand(),true));
session_start(); ob_start(); $hasDB = false; $server = 'localhost'; $user = 'user'; $pass = 'pass';
如何停止调用 ob_start发出时回调 *_clean()电话。 ob_start(function($buffer, $phase){ // code here }, 0, PHP_OUT
我在使用 foreach() 循环循环以及在该循环内部使用 ob_start() 和 ob_get_clean() 时遇到问题。 这是我的功能: protected function renderEm
我在使用 ob_start 时遇到问题。不确定交易是什么,但我已经将其简化为最简单的测试用例......仍然无济于事。我希望此代码将“bar”输出到标准输出,但我什么也没得到,错误日志中也没有错误。
在 PHP 中,有时我会看到这个: $html = Hello world HTML; 通常我会使用 ob_start() : ob_start(); ?> Hello world Hello wor
php 文档建议我应该以 ob_end_flush() 结束每个 ob_start()。我在网站的每个页面上都使用了一个,只是为了让我可以在应用程序的任何地方使用 firephp 日志方法。 该应用程
我是否允许在我的 php 文件中有两个或多个 ob_start(); 如果是的话,结束一个 ob_start(); 并开始另一个的正确方法是什么? 最佳答案 来自手册: Output buffers
在我的网络管理区域中,我使用了非常简单的逻辑: session_start(); ob_start(); if(!isset($_SESSION['user'])){ header("Loca
我复制过来的类(class)出现问题。这不是我的课,但失败的相关部分是: class foo { function process() { ob_start( array( &$this,
我的主页有几个独立的动态部分。这些部分包括公司最近的新闻列表、站点统计面板和某些员工的在线状态。最近的新闻每月更新一次,站点统计数据每天更新一次,在线状态每分钟更新一次。我想缓存这些面板,以便在每次页
我正在使用此 php 代码将 css 文件缓存到中间自己的 CMS 中。 此代码的最大限制是我无法将参数传递给我的“压缩”函数。例如,如果我有一个 css 文件到另一个目录,图像的相对路径不会被替换
通过使用 ob_gzhandler,我们在 linux 下的浏览器(firefox 和 chrome)中得到一个非法字符错误。使用 Windows 一切都很好。 简短说明:我们在一个数组中收集一些 j
所以 ob_start() 应该捕获输出,直到另一个缓冲区函数被调用,如 ob_get_clean(), ob_get_contents(), ob_get_flush()。 但是当缓冲区读取器中抛出
我希望 ob_start() 不让 echo 的输出到它们的正常目的地,而是只记录它们的内容。但它似乎并没有这样做。有任何想法吗?这是我的代码:
我不知道为什么,但这段代码在一个月前对我有用......也许我升级了 php 但不记得了。用 PHP 5.2.17 和 5.3.6 试过这个 为什么不能在 ob_start 函数的回调中使用类对象?
ob_get_contents(); ob_end_clean(); ob_start() 使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。 然后用ob_get_contents得
使用 PHP 的 ob_start($callback),您可以将静态方法作为回调传递,如下所示: class TemplateRenderer { function myCallback($bu
我是一名优秀的程序员,十分优秀!