关于木有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-数组我的小说灵音万年

PHP在现代编程中仍然是一个强大且广泛使用的工具,尤其在web开发领域。1)PHP易用且与数据库集成无缝,是许多开发者的首选。2)它支持动态内容生成和面向对象编程,适合快速创建和维护网站。3)PHP的性能可以通过缓存和优化数据库查询来提升,其广泛的社区和丰富生态系统使其在当今技术栈中仍具重要地位。

在PHP中,弱引用是通过WeakReference类实现的,不会阻止垃圾回收器回收对象。弱引用适用于缓存系统和事件监听器等场景,需注意其不能保证对象存活,且垃圾回收可能延迟。

\_\_invoke方法允许对象像函数一样被调用。1.定义\_\_invoke方法使对象可被调用。2.使用$obj(...)语法时,PHP会执行\_\_invoke方法。3.适用于日志记录和计算器等场景,提高代码灵活性和可读性。

Fibers在PHP8.1中引入,提升了并发处理能力。1)Fibers是一种轻量级的并发模型,类似于协程。2)它们允许开发者手动控制任务的执行流,适合处理I/O密集型任务。3)使用Fibers可以编写更高效、响应性更强的代码。

PHP社区提供了丰富的资源和支持,帮助开发者成长。1)资源包括官方文档、教程、博客和开源项目如Laravel和Symfony。2)支持可以通过StackOverflow、Reddit和Slack频道获得。3)开发动态可以通过关注RFC了解。4)融入社区可以通过积极参与、贡献代码和学习分享来实现。

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

WebStorm Mac版
好用的JavaScript开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

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