php闭包函数(匿名函数)

来源:互联网 发布:java 网络通信 编辑:程序博客网 时间:2024/05/04 22:15

说明:

匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量


声明:

$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;}


0 0
原创粉丝点击