php利用ob_start()清除输出和选择性输出的方法


Posted in PHP onJanuary 18, 2018

一、背景

有一段代码,因为调用了封装的方法,所以会有一些本来不需要的返回值。这些返回值该怎么处理才能让它消失呢。有的人会说,清除变量不就好了吗?但假如这个返回值无法清除,那又该怎么办呢?

二、ob_start()

1、概念:

此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。

来自php手册:http://php.net/manual/zh/function.ob-start.php

2、缓冲区的基本用法

//打开缓冲区
ob_start();
//清除缓冲区中的内容
ob_clean();
//冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_flush();

三、基本的测试

1、

echo '1';
ob_start();
echo '2';
ob_clean();

结果: 1

解释:这是最简单的用法,那就是给不想输出内容的外面加上ob_start();,然后再清除缓冲区中的内容,这样就实现了咱们的使用场景。我们可以选择性的输出自己想输出的。去掉自己不想输出的。

2、

echo '1';
ob_start();
echo '2';
//输出缓冲区
ob_end_flush();

结果: 12

3、

//打开缓冲区
ob_start();
echo '1';
//清除缓冲区,此时不会输出1
ob_clean();
//输出缓冲区。但是因为上面已经清除过缓冲区了,所以不会输出 1
ob_end_flush();
echo '2';

结果: 2

4、

ob_start(); //打开缓冲区
echo '1'; 
$a = ob_get_contents(); //输出缓冲区内容到$a,相当于赋值给$a
ob_clean();   //这里清除缓冲区内容
echo '2';    //输出2
echo $a;    //输出$a

结果: 2 1

解释:这里的ob_get_contents();是获取缓冲区的内容。我们可以把获取的内容赋值给一个变量,这样,就算清除了缓冲区,我们输出变量,还是可以正常的输出1的。

四、常用的地方

该函数常用与页面静态化,构造微型web框架能起到很关键的作用,讲渲染好的页面通过输入缓存的方式直接写入到一个文件,这样判断该文件是否存在即可实现用户本次访问需不需要去重新渲染一个页面,也可应用到大型项目中,用nosql去存储渲染好的页面,具体使用方法应人而异,看您喜欢哪种

上面就是我自己做的简单测试。大家有需要的话,可以对照着php手册,多做一些测试。

PHP 相关文章推荐
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
默默小谈PHP&MYSQL分页原理及实现
Jan 02 PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
php去除数组中重复数据
Nov 18 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
php实现有趣的人品测试程序实例
Jun 08 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
PHP策略模式写法
Apr 01 PHP
php通过header发送自定义数据方法
Jan 18 #PHP
PHP实现从上往下打印二叉树的方法
Jan 18 #PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 #PHP
PHP获取二叉树镜像的方法
Jan 17 #PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 #PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 #PHP
PHP实现找出链表中环的入口节点
Jan 16 #PHP
You might like
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
Javascript 汉字字节判断
2009/08/01 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
解决uWSGI的编码问题详解
2017/03/24 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
护理学应聘自荐书范文
2014/02/05 职场文书
文案策划求职信
2014/04/14 职场文书
转让协议书范本
2014/09/13 职场文书
质量保证书格式模板
2015/02/27 职场文书
档案工作个人总结
2015/03/03 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
演讲比赛主持词
2015/06/29 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS