PHP-木有biggerFly 1、用匿名函数让表单数据处理变得炫酷
关于木有biggerFly这是木木的第一个PHP系列biggerFly翻译过来就是逼格飞~起,因为是PHP,所以这里就是驼峰命名就像名字表达的含义一样,这个系列教你怎么把PHP用得逼格飞起当然有一些也是我曾经以为逼格飞起但是结果然并卵的木木的脑洞一直都……所以,最后我会对这些代码进行一些评价,不想看木木疯的,可以跳转别的系列,传送门在末尾那么进入第一期的正题
需求
接收表单数据,格式化处理它们,然后插入数据库
模拟
假设表单提交过来的数据为
$postData = [ ['name' => 'name1', 'createtime' => '2000-01-01', 'email' => 'email1@example.com' ], ['name' => 'name2', 'createtime' => '2000-02-01', 'email' => 'email2@example.com' ], ['name' => 'name3', 'createtime' => '2000-03-01', 'email' => 'email3@example.com' ], ['name' => 'name4', 'createtime' => '2000-04-01', 'email' => 'email4@example.com' ],];
正常做法
function format( $data ) { $format = $data; $format['createtime'] = strtotime( $data['createtime'] ); return $format;}
当然上面的也可以换成引用,引用可以减少内存的开销哦~
木有biggerFly
(剧本载入中……)木木:我不想写那么多format方法,这次提交表单要写一个format,下次另一个地方也要一个format,每次都定义一个,好麻烦啊,有没有。如果还有一个验证用的validate方法,或者别的abc方法……天啊,饶了我吧biggerFly:要不试一试匿名函数?木木:哈?匿名函数是什么鬼?biggerFly:匿名函数传送门在此,走你木木:好晕,你直接告诉我,要怎么做吧……biggerFly:
class A { public $data = NULL; public $format = NULL; /** * 执行 */ public function run() { foreach ( $this->data as $key => &$data ) { if ( is_callable( $this->format ) ) { $method = $this->format;//必须赋值给一个变量,不然会报错:format方法不存在 $method( $data ); } } } /** * 设置data数组 * @param array $data */ public function setData( $data ) { $this->data = $data; return $this; } /** * 获取data数组 * @return array */ public function getData() { return $this->data; }}
木木:所以呢?怎么用biggerFly:以模拟为例子
$a = new A();$a->setData( $postData );$a->format = function( &$data ) { $data['createtime'] = strtotime( $data['createtime'] );};$a->run();var_dump( $a->getData() );
运行结果略,这里会把二维数组$postData的createtime的日期格式转化为时间戳biggerFly:通过这样的方式,只要在A类里定义一些常用的方法,就可以写不需要重复定义函数,比如一些常用的规则解释
- is_callable传送门。如果严谨一点,可以加一个is_array的判断,确保是函数
- 这样可以省去很多额外的函数定义,一些常用的比如format、validate方法直接内嵌在A类里就好了
- 同时每一个需要格式化表单数据的脚本可能就少引用了很多类,比如,如果你要检测字符串格式是不是邮箱,你可能要在每个表单处理的地方调用一个String类,有了A类,你就可以只需要一个A,把所有这种引用的写在A里就好了
- 这些处理表单数据的函数本来就是一次性的(这些format方法难道还适用别的表单数据处理咩?),所以,用匿名函数也比较符合它的含义
- 不觉得高大上咩?
其他
- 通过这样的处理,你可能还可以写出如下类似的代码,这里就不把实现写出来了,对着格式很容易就可以完成的
$a->validate = function( &$data ) {$data['email'] = array( 'email', 'unique' );$data['name'] = array( 'required', 'unique' );$data['createtime'] = array( 'datetime', function($time) { if ( strtotime( $time ) >= time() ) { return false; } else { return true; } } );};
登录后复制 - 匿名函数在php原生函数里经常出现,它们也被叫做回调函数,想要了解更多匿名函数,建议参考手册以及相关评论匿名函数```
传送门
往期PHP-数组我的小说灵音万年

热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)

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长
