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 相关文章推荐
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP 已经成熟
Dec 04 PHP
PHP 表单提交给自己
Jul 24 PHP
php microtime获取浮点的时间戳
Feb 21 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
全面了解PHP中的全局变量
Jun 17 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 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中显示数组与对象的实现代码
2011/04/18 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
Python如何实现文本转语音
2016/08/08 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python 占位符的使用方法详解
2019/07/10 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
医学院学生的自我评价分享
2013/11/19 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
公司放假通知怎么写
2015/04/15 职场文书
学校证明范文
2015/06/24 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
小学主题班会教案
2015/08/17 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
表扬信范文
2019/04/22 职场文书