php闭包函数(匿名函数)
2016-01-07 20:31
831 查看
说明:
匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量
声明:
$fun = function(){
//逻辑
};//带结束符
简单使用:
function test($id){
$fun = function($id){
return $id * $id;
}
return $fun($id);
}
实用场景:
封装一个方法,会带出重复实用的逻辑,此逻辑在其他地方基本不会使用,那就放到你封装的方法中去;
例举:
csv导出,支持700列数据(需要一个闭包进行封装)
匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量
声明:
$fun = function(){
//逻辑
};//带结束符
简单使用:
function test($id){
$fun = function($id){
return $id * $id;
}
return $fun($id);
}
实用场景:
封装一个方法,会带出重复实用的逻辑,此逻辑在其他地方基本不会使用,那就放到你封装的方法中去;
例举:
csv导出,支持700列数据(需要一个闭包进行封装)
function export_csv( $fileName, $headArr, $data, $filenum ) { include APP_PATH . "../Public/plugin/excel/PHPExcel.php"; //对数据进行检验 if ( empty( $data ) || !is_array( $data ) ) { echo '导出的数据为空!'; die(); } //检查文件名 if ( empty( $fileName ) ) { echo '文件名不能为空!'; exit; } //闭包封装 /** * @uses 闭包封装:获取A-Z的合法输出 * @author jhl * @param int $headkey * @return string */ $get_a_z_result = function($headkey){ //设置表头 $key = 65;//$key = 65;ord为大写的 A $step = 26;//到25个阶梯就进行更新$firstkey $num = floor($headkey/$step); $firstkey = chr($key + $num - 1); $i = chr($key + $headkey % $step); if($headkey <= 25){ $result = chr($key + $headkey); }else{ $result = $firstkey.$i; } return $result; }; $date = date( "Y_m_d", time() ); $fileName .= "_{$date}.xls"; //创建PHPExcel对象,注意,不能少了\ $objPHPExcel = new \PHPExcel(); $objProps = $objPHPExcel->getProperties(); //设置表头 foreach ( $headArr as $headkey=>$v ) { // $colum = get_result($headkey); //闭包 $colum = $get_a_z_result($headkey); $objPHPExcel->setActiveSheetIndex( 0 )->setCellValue( $colum . '1', $v ); /* 设置宽度 */ $objActSheet = $objPHPExcel->getActiveSheet(); $objPHPExcel->getActiveSheet()->getColumnDimension( $colum )->setWidth( 22 ); $key += 1; } $objPHPExcel->getActiveSheet( 0 )->setTitle( $fileName ); //合并单元格 if ( $filenum ) { $spnum = ord( "B" ); for ( $i = 0; $i < $filenum; $i++ ) { $j = chr( $spnum ); $topname = $j; $spnum++; } $objPHPExcel->getActiveSheet( 0 )->mergeCells( 'B1:' . $topname . '1' ); } $column = 2; foreach ( $data as $key => $rows ) { //行写入 foreach ( $rows as $keyName => $value ) {// 列写入 //闭包 // $j = get_result($keyName); $j = $get_a_z_result($keyName); $objActSheet->setCellValue( $j . $column, $value ); } $column++; } $fileName = iconv( "utf-8", "gbk", $fileName ); //重命名表 // $objPHPExcel->getActiveSheet()->setTitle('test'); //设置活动单指数到第一个表,所以Excel打开这是第一个表 $objPHPExcel->setActiveSheetIndex( 0 ); header( 'Content-Type: application/vnd.ms-excel' ); header( "Content-Disposition: attachment;filename=\"$fileName\"" ); header( 'Cache-Control: max-age=0' ); $objWriter = \PHPExcel_IOFactory::createWriter( $objPHPExcel, 'Excel5' ); $objWriter->save( 'php://output' ); exit; }
相关文章推荐
- php安装xdebug
- php及js中区分字符串和数字的方法
- PHP线程安全与非线程安全安装包选择
- 【php】Array
- lintcode 中等题:search in rotated sorted arrayII 搜索旋转排序数组II
- php7新特性
- 安卓核心组件三ContentProvider
- PHP学习练手(十二)
- php 写入txt文件
- phpExcel 读取和导出
- PHP 框架概况
- Ubuntu14.04下安装ZendStudio10.6.1+SVN出现Failed to load JavaHL Library
- 配置 php-fpm 监听的socket
- php写入数据到txt文件
- laravel中路由、视图、控制器的工作流程
- [转]验证E-mail、用户名、社保号、IP地址等10个实用的PHP正则表达式
- 2、FileOutputStream--->文件输出流(向文件写入数据)
- 如何写一个yii2的插件
- 过完免费的内容管理系统(CMS)的PHP脚本
- PHP验证码无scripts的一些知识