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 相关文章推荐
js下函数般调用正则的方法附代码
Jun 22 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
PHP中读取照片exif信息的方法
Aug 20 PHP
php购物车实现方法
Jan 03 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
分享10段PHP常用代码
Nov 11 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
php socket通信简单实现
Nov 18 PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
phpQuery采集网页实现代码实例
Apr 02 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
PHP脚本的10个技巧(6)
2006/10/09 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
php常用数学函数汇总
2014/11/21 PHP
php操作mongoDB实例分析
2014/12/29 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python中dict和set的用法讲解
2019/03/28 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python函数的万能参数传参详解
2019/07/26 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
解析Python3中的Import
2019/10/13 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
掌上明珠Java程序员面试总结
2016/02/23 面试题
《鸟的天堂》教学反思
2014/02/27 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android