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+DBM的同学录程序(1)
Oct 09 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
php的mssql数据库连接类实例
Nov 28 PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
详解PHP Swoole与TCP三次握手
May 27 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
改进的IP计数器
2006/10/09 PHP
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
推荐信格式范文
2014/05/09 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript