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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
经典的PHPer为什么被认为是草根?
Apr 02 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php实现简单的MVC框架实例
Sep 23 PHP
ThinkPHP路由机制简介
Mar 23 PHP
CI框架常用方法小结
May 17 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 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
如何开始收听短波广播
2021/03/01 无线电
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
JavaScript中链式调用之研习
2011/04/07 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
js实现进度条的方法
2015/02/13 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
详解Django配置优化方法
2019/11/18 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
法院实习人员自我鉴定
2013/09/26 职场文书
小学生自我鉴定
2013/10/12 职场文书
公务员职务工作的自我评价
2013/11/01 职场文书
企业演讲稿范文
2013/12/28 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
国际贸易求职信
2014/07/05 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
vue的项目如何打包上线
2022/04/13 Vue.js