说明:
匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量
声明:
$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;
}