PHP注释-2021年9月
大家好!
PHP8.1已经到达了第一个候选版本,更改列表已经确定。在计划于11月底发布的最终版本之前,我们还会看到至少5个候选版本。
同时,PHP内部已经在讨论PHP8.2的另外三个建议:操作符重载、美元这个
键入提示,并弃用动态属性。
当心恶意软件编写程序包!其中两个最近在Packagist上被发现。
PHP-FIG讨论了向PSR添加一种新类型的标准。
您可以在9月版的PHP Annotated中阅读更多关于此新闻的信息。像往常一样,我们为您精心挑选了各种优秀的文章、工具、视频和流。
⚡️ 消息
PHP 8.1.0 RC 1
离最终版本还有两个半月,至少还有5个候选版本。
8.1版的最终发布还有两个半月,至少有5个候选版本即将发布。这里有一个关于如何在macOS上安装PHP8.1的微型教程通过自制。此外,PHP8.1还有现成的Docker图像.
您可以在以下站点上找到PHP8.1的全面描述:php.watch/versions/8.1在Brent Rooses的博客上,stitchr.io/blog/new-in-php-81.
PHP8.0.10,PHP 7.4.23,PHP 7.3.30
当前分支的安全性和错误修复更新。
斯威夫特梅勒的终结
受欢迎的邮包速递员将只支持到11月。它将被替换为symfony/mailer.
Symfony/mailer的特性和概念复制了Swiftmailer,因此迁移应该相当容易。校长有一份工作迁移脚本,它只需要重命名类。
PHP发展建议(PERs)
PHP-FIG目前只发布PSP标准。问题是有些标准需要不断完善。例如,在代码样式方面,PSR-12取代了PSR-2,现在它不包括PHP7.4-8.0中的新特性。
现在有人提议采用一种称为PER的特殊类型的建议,这种建议可以随着时间的推移而改变。
PER是(将/拟用于)随着时间的推移进行标准“累积”是有意义的情况。编码标准、类型库、docblock标记等。
PSR非常适合“我们希望设计一个我们可以信赖的单一商定目标,而不是改变。”
-拉里·加菲尔德(@Crell)2021年9月9日
恶意软件编写程序包
在Packagist上,有一个名为
符号字体/流程
它做的事情和symfony/过程
,但它也收集了有关该机器的信息,将其发送给第三方,并打开了一个网络外壳。攻击者预计用户在安装和键入时可能会拼错包名
符号字体
而不是西蒙尼
.该恶意软件包已从Packagist和GitHub中删除,并且对其工作原理的分析有空。
另一个后门被发现在laraveli/二维码包裹从代码中可以看出,恶意软件正在复制这种类型的web shell把它放在机器上。
为了保护自己免受此类攻击,您可以添加本地php安全检查器到您的CI管道或使用php安全检查器GitHub操作。
对于更复杂的情况,可以运行marcocesarato/PHP反恶意软件扫描仪.
这个hautelook/alice包存储库已从GitHub中删除
该软件包的下载量超过800万次,主要贡献者不知道为什么他被从维护者列表中删除,而存储库显然是私有的。
我不知道:存储库似乎已被私有化,我已从维护人员中移除(尽管我仍然可以看到repo)
-泰奥·菲德里(@tfidry)2021年9月9日
Théo的GitHub配置文件中提供了一个工作叉:Theofiry/AliceBundle.
PHP内部构件
[RFC]不推荐动态属性
在当前版本的PHP中,如果尝试写入不存在的属性,则会自动创建该属性。
在现代代码中,对不存在的属性进行写入很少是有意的——这通常是一个错误。
此RFC建议取消并随后取消创建动态(未声明)属性的功能。
类用户{public$name;}$User=新用户;//分配声明的属性用户::$name$user->name=“foo”;//哎呀,一个输入错误:$user->nane=“foo”;//PHP8.2:抛出警告,但仍创建动态属性。//PHP9.0:引发错误异常。
此更改不适用于标准类
以及它的继承人。魔法方法的行为__得到
/__设置
也不会受到这种变化的影响。$obj=(对象)[];//=新的stdClass;//无弃用警告$obj->foo=1;类myStdClass扩展stdClass{}$obj2=new myStdClass;//无弃用警告$obj2->bar=1;
通过PHP9.0中的这一更改,可以将对象的大小减少8个字节。当然,对于单个对象来说,这算不了什么。但对于大型应用程序,累积起来可能会产生明显的差异。还有一个讨论是关于这样做是否有意义别名动态对象的stdClass.
[RFC]用户定义的运算符重载
在本RFC中,Jordan LeDoux基本上建议为每个操作符定义不同的魔术方法,例如。
__添加()
对于`+`
或__等于()
对于`==`
.
使用这些方法可以描述应用于对象的运算符的所需行为。$a=新号码(8)$b=新编号(6)$c=新数字(4);//而不是这个$posRoot=$b->mul(-1)->add($b->pow(2)->sub($a->mul($c)->mul(4))->sqrt())->div($a->mul(2));//可以这样做$posRoot=(-1*$b)+($b**2-4*$a*$c)->sqrt())/(2*$a);
如果这个提议被接受,那么就有可能在userland代码中实现标量对象的行为。[RFC]$此返回类型
尼基塔提出了使用
美元这个
作为返回值类型。这将导致解释器检查对象是否与返回的对象相同。以下是它与
自己
和静止的
本·拉姆齐:自己
–返回值必须是设置此类型声明的同一类的实例。静止的
–返回值必须是使用此类型声明调用方法的同一类的实例。美元这个
–返回值必须与使用此类型声明调用方法的实例相同。
类测试{public function method():$this{return$this;}公共函数not_this():$this{return new self();//致命错误}
[RFC]不推荐部分支持的可调用项
以下可调用项当前被
可调用
这个_可调用()
功能,以及调用用户函数()
,但不受n支持$callable()
.“self::method”“parent::method”“static::method”[“self”,“method”][“parent”,“method”][“static”,“method”][“Foo”,“Bar::method”][new Foo,“Bar::method”]
此RFC建议在PHP8.2中弃用,并在PHP9.0中删除对这些可调用项的支持。普通可调用项,如
“功能”
,“Foo::方法”
,[“Foo”,“method”]
或[新Foo,“方法”]
不会受到此提案的影响,因为对他们来说,使用括号调用将按预期工作:类Foo{function method(){echo'method';}}[新的Foo,“method”]();/>方法
GitHub上的所有PHP RFC
作为一个实验,PHP8.1版本管理器BenRamsey导出了所有838曾经向Git讨论过RFC,以及每个RFC的更改历史。
工具
- whsv26/功能性–作者在集合的现有PHP实现中遇到问题,并编写了自己的包。
- 法贝利奥/法贝尔–此transpiler for PHP允许在较旧的环境中使用最新PHP版本的功能,或者在必须保持向后兼容性的情况下使用。您还可以开始添加对尚不存在的功能的支持,例如
异步/等待
关键词。
类似的工具已经存在,比如marcioAlmada/耶或预处理. 和校长也可以做后端口。但Phabel的特殊之处在于与创作者
. - phparkitect/arkitect–用于定义和检查项目体系结构规则的工具。
- niklongstone/regex反向–生成满足给定正则表达式的随机字符串。
- azjezz/psl–标准PHP库的外观。
- github php/赞助商–用于使用GitHub赞助商API的软件包。您可以通过检查用户是否是发起人来组织访问控制。
- koriym/koriym.Attributes–一个简单的工具,允许您通过单个接口读取PHPDoc注释和PHP8属性。更高级的螺旋线/属性也可用于相同的任务。
- grep.app–在GitHub上快速搜索代码的便捷工具。
- mrsuh/php泛型-用PHP编写的PHP泛型。这是在PHP中实现语法级泛型的一次有趣的功能性尝试。
西蒙尼
- kafkiansky/symfony中间件–与PSR-15兼容的Symfony中间件。
- lexik/LexikTranslationBundle–这允许您将翻译导入数据库,并提供一个易于编辑的界面。
- 基于Symfony组件测试应用程序的帮助程序:Zen/mailer试验,天顶/控制台测试,天顶/信使测试,ZenRock/浏览器.
- 微服务中的Symfony Messenger:消息契约和弹性–阅读有关微服务和异步通信的有趣文章。
- Symfony组件终极指南–您应该在项目中使用哪些工具,以及何时使用它们。
- 如何使用Symfony Validator动态验证某些数据.
- PhpStorm的Symfony插件有刚刚得到支持对于PHP8原则元数据属性。
拉维尔
- 拉威尔州2021年调查结果还有一段视频回顾了拉威尔日报.
- lepikhinb/laravel fluent–此软件包提供了定义模型属性的表达方式。它在运行时自动构建强制转换,并将本机自动完成添加到模型的属性中。
- 为Laravel Octane创建RoadRunner插件.
- 测试拉威尔–Spatiale的付费测试课程,提供免费剧集:测试中间件,
冷拉氏试验技术和测试表单. - Laravel中的队列组件–为刚刚起步的人继续播放关于框架的系列视频。
- 规划和启动Laravel应用程序–拉威尔核心团队成员穆罕默德·赛义德(Mohamed Said)的一条有趣的信息流。在流中,他编写了一个应用程序,并对他所采取的步骤进行了评论。
Christoph Rumpel建立了一个很酷的网站,larastreamers.com,您可以从中获取有关所有即将到来的流的通知。 - PHP圆桌会议:10年拉雷维尔泰勒·奥特韦尔、马特·斯塔夫和埃里克·巴恩斯。
易
杂项
- 拉里·加菲尔德(Larry Garfield)的两篇文章介绍了有用的测试写作技巧:PHPUnit数据提供者的乐趣和高级恶作剧.
- 来自Matthias Noback的测试提示:编写自包含测试.
- 关于PSR抽象的使用–Matthias Noback讨论了将代码与PSR绑定、制作包装器或编写自己的接口是否更好。布伦特鲁斯答复对这个。
- 为PHP项目创建公共/私有多monorepo.
- 关于PHP8.0中匹配表达式的所有内容.
- Derick Rethans关于Xdebug 3的几段视频:剖析:分析数据,激活和触发器.
播客
- devmode#89–Craft CMS应该使用Yii3还是Laravel?–CraftCMS是基于Yii2的商业CMS。在本播客中,其开发人员讨论了Craft CMS生态系统及其向Laravel的潜在过渡。
- PHP内部消息#94–尼基塔·波波夫讨论Foreach后的RFC展开参考.
- 菲律宾新闻#93–乔丹·勒杜讨论已撤销的RFC从不用于参数类型.
谢谢你的阅读。我们希望你有一个伟大的一天!
如果你有任何有趣或有用的链接可以通过PHP注释分享,请在这篇文章上留言或给我发一封电子邮件推特.
你的JetBrains PhpStorm团队
发展的动力