PHP注释-2021年5月
PHP 8.0正在增加动力,采用正在增加,这是由作曲家的统计数据所证明的。
同时,PHP内部已经接受了PHP8.1的一系列更改,包括捆绑PHP扩展中的新never类型和名称空间,以及一些将被弃用的特性。
选择了PHP 8.1发布管理人员,并在讨论中有几个有趣的建议,包括物业访问器,纯交叉口类型和最终常量。
请阅读5月版的PHP注释。像往常一样,我们为您精心挑选了一系列的文章、工具、视频和流媒体。
⚡️新闻
PHP版本统计- 2021.1
当Composer连接到packagist.org时,基于其发送的数据的传统统计信息编译:
- PHP 7.4: 45.92% (+ 3.31)
- PHP 7.3:21.30%(-5.75)
- PHP 7.2:12.89%(-2.39)
- PHP 8.0: 9.44% (+9.17)
- PHP 7.1: 5.21% (-2.24)
PHP可在谷歌云功能
谷歌云的无服务器平台现在本地支持PHP。与googlecloudplatform / fress-framework-php /可以在基于PHP 7.4的运行时中运行函数。
还有一些细节关于Symfony存储库的GitHub讨论.Symfony 5.3应该能在GCF上顺利运行,这要归功于Runtime组件。你只需要安装php-runtime / google云.
Composer命令注入漏洞
Composer中的漏洞仅影响已安装Mercurial的系统。但是,值得立即更新到版本2.0.13和1.10.22,其中包含修复程序。查看更详细的技术分析的弱点。
跟踪git.php.net攻击
攻击者代表Rasmus Lerdorf和Nikita Popov推动了两个致力于PHP来源。问题很快被检测到并解决了。恶意代码没有得到用户。
事实证明,git.php.net服务器允许通过HTTPS提交,并使用摘要身份验证,它接受md5哈希作为秘密。攻击者从master.php.net获得了所有贡献者的哈希数据库,该服务器可能是最初被入侵的服务器。
因此,所有的开发都完全搬到了GitHub,这使得语言开发人员更容易。
- PHP 7.4.19,PHP 8.0.6-修复PDO_pgsql。
PHP内部
✅[RFC]永远不会键入
PHP 8.1将有一个新的返回值类型:
从来没有
.用函数或方法声明
从来没有
类型表示它永远不会返回值,并且它要么抛出异常,要么使用类型调用终止die ()
,退出()
,触发器错误()
.它是一个空的底部类型,是所有其他类型的子类型,在Python、Rust、Kotlin和TypeScript中都有类似的类型。这种类型改进了静态分析。
函数重定向(字符串$uri): noreturn{头('位置:')。美元的uri);退出();}函数redirectToLoginPage(): noreturn{重定向('/登录');}
你可以找到更多的细节在PHP。看或者听新闻播客用亚光棕色和ondřej毛米。✅[RFC]弃用隐式非整数兼容浮动到int转换
在PHP8.1中,一个
E_DEPRECATED
通知会在何时抛出漂浮
转化为int
小数部分丢失了。稍后,在PHP 9.0中,这将导致TypeError
.函数acceptInt(int $i) {var_dump($i);} acceptInt (3.1415);> int(3) //弃用通知
从PHP内部新闻播客#83和乔治·彼得·班亚德。✅[RFC]逐步淘汰Serializable
在PHP 8.1中
可序列化的
接口将被弃用。当类使用时,将抛出一个弃用通知只要这个接口,也就是说,如果类没有额外的魔法方法__serialize ()
和__unserialize ()
.✅[RFC]绑定PHP扩展中的命名空间
这标志着清洁PHP的一小步!扩展中的新符号(类,接口等)现在必须使用命名空间。
这是一个例子。的
资源
类型在PHP中实际上是过时的,而且是已经存在的资源正在慢慢迁移到对象.在PHP 8.1中,一些资源将被以下命名空间类替换:IMAPConnection -> IMAP\Connection FTPConnection -> FTP\Connection LDAP -> LDAP\Connection LDAPResult -> LDAP\Result LDAPResultEntry -> LDAP\ResultEntry PgSql -> PgSql\Connection PgSqlResult -> PgSql\Result PgSqlLob -> PgSql\Lob
✅[RFC]为内部方法添加返回类型声明
PHP 8.0中的大多数内置方法都接收了参数和返回类型声明。但是,在某些情况下,这无法完成,例如用于公共非最终方法的返回值。问题是它们可以在用户代码中覆盖。
下面是一个例子来说明这个问题
class somestandardclass {public function方法():int {}} class userclass扩展somestandardclass {public function方法(){}} //致命错误:userclass :: method()声明必须与somestandardclass :: method()兼容
现在,这些病例将逐渐转移。在PHP 8.1中,所有内部方法也将获得缺失的类型。如果在用户代码中重写了它们,则会抛出一个Deprecation通知。
class MyDateTime extends DateTime {public function modify(string $modifier) {return false;}} // Deprecated:声明MyDateTime::modify(string $modifier)应该与DateTime::modify(string $modifier): DateTime|false兼容
已选择PHP 8.1的发布管理器
这次会有三名经理:经验丰富乔沃特金斯(pthreads, parallel, pcov)和两个新来者,帕特里克·阿拉特(blackfire.io)和本·拉姆齐(Ramsey / Uuid.).检查PHP内部新闻播客#84和本和帕特里克在一起
PHP 8.1的新建议:
[RFC]部分功能应用
部分函数应用程序(部分函数)是仅在函数调用时只绑定某些参数时,其他参数仍保留为稍后传递的参数。
例如,这是一个完整的函数:
Function whole($ 1, $ 2){/*…* /}
这是基于它的部分结论:部分美元= (?2);
在本例中,部分签名看起来像这样:功能(1美元){/ * ... * /}
为什么需要这样做?首先,您现在可以参考任何功能或方法,并在任何地方传递
可谴责
是期待。例如,你可以做到这一点array_map(某物:: toString(?),[1,2,3]);array_map(strval(?),[1,2,3]);//而不是array_map([stapths :: class,'toString'],[1,2,3])array_map('strval',[1,2,3]);
其次,作为结果,这将是可能的实现管道操作符|>
:$result = "Hello World" |> htmlentities(?) |>爆炸(?);
看到它在行动3v4l.org..感谢Larry Garfield, Joe Watkins, Levi Morrison和Paul Crovella的RFC和实现。
(RFC)属性访问器
尼基塔已经完成了属性访问器的实施,该提议现在正式在讨论中。
底线是,传统的getter和setter不方便使用,以及魔法方法
__get
和__设置
不是特定的。新的访问者旨在解决这些问题。语法是受c#启发的:
class foo {public $ prop {get {/ * ... * /} set {/ * ... * /}}}
您可以使用它们来实现只读属性:class User {public string $name {get;} public function __construct(string $name) {$this->name = $name;} }
您可以指定非对称访问,也就是说,将它们分别设置为公共或私有,以便进行读写:class User {public string $name {get;私人套装;} ...}
或者你可以使用它们作为成熟的方法进行验证或其他操作:类Foo {public int $bar {get {error_log('获取$bar');返回$ this - >栏;} set {assert($bar > 42);= $ $ this - >酒吧酒吧;}}}
[RFC]纯交叉口类型
联合类型是在PHP 8.0中添加的,这个RFC建议添加交集类型。
语法
TypeA&TypeB
,这意味着变量必须是instanceof TypeA
和instanceof TypeB
.细节
A类{私人遍历和可数美元$ CONSEDERTINTIRAL;公共功能SetIrderator(可遍历和可数$ ComputableTerator):void {$ this-> countableiterator = $ countableTerator;public function函数getiterator():遍历和可数{返回$ this-> consocdableiterator;} }
该建议被称为“纯交集类型”,因为不支持与联合类型的组合,将留作将来考虑。复杂类型的别名也留给将来使用。
(RFC)反对蜱虫
有一个蜱机制在PHP中:
声明(Ticks = 1)
.最初需要它来跟踪pcntl信号。现在你可以用pcntl_signal()
和pcntl_async_signals ()
这就是为什么有人建议在PHP 8.1中弃用勾号,并在PHP 9中完全删除它们的原因。最终的类常量
这个RFC的作者提出了一个
最后
修饰符用于常量,以便它们不能在子类中被重写。细节
类Foo {final public const X = " Foo ";} class Bar extends Foo {public const X = " Bar ";} //致命错误:Bar::X不能覆盖final常量Foo::X
RFC的有趣事实:接口中的常量已经是最终的了。
- 对于那些想要开始为PHP源代码做贡献的人,还有几个链接:
- 在php-src中使用clon-来自PHP 8.1的发布经理之一Ben Ramsey的说明。
- 如何从源代码编译PHP在Debian/Ubuntuphp入门指南。
工具
- Spatie / Data-Transfer-Object V3- PHP 8的高级键入数据传输对象。
- spatie /叉- pcntl_fork的包装器,可以简单方便地并行运行PHP脚本。在此了解更多博客这视频概述.
- PHPBench / PHPBench 1.0.0-对代码进行基准测试的有用工具。新版本有很多更新,包括PHP 8支持。了解更多内容释放雷达#10与丹水蛭.
- rybakit / phpunit-extras- 自定义注释和
预计* ()
PhpUnit制作清洁剂的方法。 - 感染0.23.0-突变测试工具更新,现在支持Pestphp / Pest..
- captainhookphp / captainhook- Git挂钩管理PHP项目。例如,您可以轻松地设置样式检查或运行测试前推送到存储库。
- 0xABADCAFE / PHP-DEMO-ENGINE- 刚刚为乐趣而制作的PHP中的Demoscene发动机。在控制台中显示使用ASCII符号的图形。
Symfony
- Symfony 5.3中有什么
- 与Symfony和Panther进行端到端测试.
- 批处理Symfony Messenger消息使用pcntl_alarm ().
- PrestoPHP / PrestoPHPSilex微框架已经被弃用了,并且已经有很长一段时间没有被支持了,但是这个维护的分叉是为了拯救。
- Symfony的一周#750(2021年5月10-16日)
Laravel
- Laravel /辛烷1.0-这个包允许你在Swoole或RoadRunner下运行Laravel,引导执行一次,然后每个请求由相同的应用程序实例处理。中了解有关应用程序开发人员的更改的更多信息默罕默德说的文章,也从马塞尔Pociot.
- thedevdojo /波-使用Laravel创建SaaS的框架。它有用户配置文件、订阅、API、管理和博客。
- Laravel-Arcanist / Arcanist-一个用于构建多步骤表单向导的包。看看这个一个详细的概述Kai Sassnowski。
- cerbero90 / lazy-json-在惰性集合中加载重JSON的包照亮/支持.
- mailcare / mailcare- 一种一次性电子邮件地址服务mailinator.com.建于稻花。
- 在Laravel中采购事件- space公司的付费课程。其中一部分是可用的免费.
- Christoph Rumpel如何测试Livewire组件.
- Laravel全球聚会#8
yii.
- 2021年新闻,第2期–关于Yii 3和一组Yii 2发行版的新闻,以及与代码没有直接关系的有趣项目。
- Yii 3的新软件包:yiisoft /分析器,yiisoft /错误处理程序,yiisoft /翻译,yiisoft / yii-event,yiisoft /资产.
PhpStorm
杂项
- 升级一个项目到PHP 8.0更新计划,以及将代码库升级到8.0时的主要潜在困难。
- 不要嘲笑你不拥有的东西-因为如果你不控制被取代的依赖,事情会很快失去控制。
- PHP中的命名实体识别–一个使用RubixML.
- 使用异常和重试使用网络服务时。
- 内置PHP函数的算法复杂度(大O符号).
- 看看Packagist上最受欢迎的包和他们的许可证-许多流行的软件包要么没有许可,要么设置错误。
视频
- 现代PHP与Rasmus LerdorfPHP之父讲了一点Etsy代码和PHP 8。
- Derick Rethans在Xdebug 3上的视频:5分钟内使用Docker和PhpStorm进行Xdebug,用Xdebug在Docker中分析,在Linux上用PhpStorm调试单元测试.
播客
- PHP丑陋的播客:
•#236:- 内存泄漏。
•#235:–丑陋的热浴缸PHP编码。 - PHP释放雷达:
•第9章–与安德雷亚思·布劳恩讨论学说缓存2.0。 - PHP内部消息播客:
•集# 82- 关于自动捕获多语句闭合(RFC) 和拉里加菲尔德和努诺Maduro.
•集# 79- 有关新的
带的初始值设定项中的运算符尼基塔波波夫.
社区
- PHP的总线因子是2Joe Watkins说,只有两个人知道足够的PHP源代码,所以我们应该考虑这一点,当考虑添加新的功能到PHP。他还表示,我们需要更多开发者致力于核心内容。
感谢你的阅读!
如果你有任何有趣或有用的链接通过PHP注释分享,请在这篇文章上留下评论或给我推特.
您的Jetbrains Phpstorm团队
开发的驱动器