php闭包函数(匿名函数)

说明:

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


声明:

$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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值