PHP每月注释

PHP注释-2021年5月

PHP每月注释
问候大家!

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.19PHP 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 TypeAinstanceof 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源代码做贡献的人,还有几个链接:

工具

Symfony

Laravel

yii.

PhpStorm

杂项

视频

播客

社区

  • PHP的总线因子是2Joe Watkins说,只有两个人知道足够的PHP源代码,所以我们应该考虑这一点,当考虑添加新的功能到PHP。他还表示,我们需要更多开发者致力于核心内容。

感谢你的阅读!

如果你有任何有趣或有用的链接通过PHP注释分享,请在这篇文章上留下评论或给我推特

订阅PHP注释

您的Jetbrains Phpstorm团队
开发的驱动器