closure - 求指导:php闭包实现数组的格式化
我原本的意思是如下代码
<code> $eData=array( 'section'=>$v['section'], 'page'=>$v['page'], //'status'=>$v['status'], 'type'=>$v['type'], ); unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); $eData['data']=serialize($v); </code>
使用闭包的方式
<code> $eData=array( 'section'=>$v['section'], 'page'=>$v['page'], //'status'=>$v['status'], 'type'=>$v['type'], 'data'=>function(){ unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); return serialize($v); } ); </code>
问题 1、php的闭包类closure 并不支持返回参数
问题 2、使用了use方法后仍然不能够对$v进行格式化操作,只能够删除其中的元素
use 方法
$eData=array( 'section'=>$v['section'], 'page'=>$v['page'], //'status'=>$v['status'], 'type'=>$v['type'], 'data'=>function() use($v){ unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); return $v=serialize($v); }, );
回复内容:
我原本的意思是如下代码
<code> $eData=array( 'section'=>$v['section'], 'page'=>$v['page'], //'status'=>$v['status'], 'type'=>$v['type'], ); unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); $eData['data']=serialize($v); </code>
使用闭包的方式
<code> $eData=array( 'section'=>$v['section'], 'page'=>$v['page'], //'status'=>$v['status'], 'type'=>$v['type'], 'data'=>function(){ unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); return serialize($v); } ); </code>
问题 1、php的闭包类closure 并不支持返回参数
问题 2、使用了use方法后仍然不能够对$v进行格式化操作,只能够删除其中的元素
use 方法
$eData=array( 'section'=>$v['section'], 'page'=>$v['page'], //'status'=>$v['status'], 'type'=>$v['type'], 'data'=>function() use($v){ unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); return $v=serialize($v); }, );
是要这个效果吗?
$eData = array( 'section' => $v['section'], 'page' => $v['page'], 'type' => $v['type'], 'data' => call_user_func( function() use (&$v) { unset($v['page']); unset($v['id']); unset($v['type']); unset($v['section']); return serialize($v); } ), );
大致看了一下,你应该想让 'data'是serialize($v)吧?也就是将'section','page','type'去除后后序列化的字符串吧。'data'=>function() 是将匿名函数赋给了data.不是将返回值赋给data。
第二个问题太傻叉了
'data'=>function() use($v){ unset($v['page']); //unset($v['status']); unset($v['id']); unset($v['type']); unset($v['section']); return $v=serialize($v)
使用use语法传递的是重新复制了一份传递,又不是引用,要想将$v变成序列化后的值就应该是引用use(&$v)
人家二楼说的是对的,凭什么不给人家采纳?
你那样是将一个匿名函数传给$eData['data']了,并没有把函数的返回结果给它。
不知道题主说的用闭包是怎样的情况。
就根据自己理解来回答下好了。
类似下面这样写:
<code>class A { var $eData = Array(); function formatArrayWithHookFn( $hookFn ) { $hookFn( $this->$eData ); } } $a = new A(); $a->formatArrayWithHookFn(function( $arrayToFormat ) { $arrayToFormat['foo'] = 'bar'; // ... }); </code>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

登录 CakePHP 是一项非常简单的任务。您只需使用一项功能即可。您可以记录任何后台进程(如 cronjob)的错误、异常、用户活动、用户采取的操作。在 CakePHP 中记录数据很容易。提供了 log() 函数

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。
