<output id="ilehw"><bdo id="ilehw"><nobr id="ilehw"></nobr></bdo></output>
        <dl id="ilehw"><font id="ilehw"></font></dl>
          1. PHP 早已不是十年前的模样

            h4cd
             h4cd
            发布于 2019年05月15日
            收藏 68

            开发者 Brent 发布了一篇文章,详细介绍了 2019 年的 PHP 是怎么样的。

            原文地址:https://stitcher.io/blog/php-in-2019

            Brent 承认 PHP 当前仍然存在一些问题,比如许多核心函数仍然有不一致的方法签名、配置设置还是令人困惑,但是以他自己的开发经验来看,他认为 PHP 是 Web 开发的绝佳选择,使用 PHP,他可?#28304;?#24314;可靠、可维护和高质量的应用,并且自己与客户对最终结果都满意。

            文章中 Brent 关注于 PHP 这些年来发展得好的一面,他通过几?#24405;?#28857;,?#24471;?ldquo;PHP 不再是十年前那一门糟糕的语言了”:

            • PHP 正在积极开发,每年都会发布新版本
            • PHP 5 之后?#38405;?#22312;不断提高
            • 有非常活跃的框架、包?#25512;?#21488;组成的语言生态
            • PHP 在不断发展,过去几年中添加了许多新功能
            • 各种开发工具在过去几年中已经成熟,并且保持增长

            PHP 正在积极开发,每年都会发布新版本

            当前 PHP 版本是去年 12 月份发布的 7.3,7.4 预计在今年年底发布,而 PHP 8.0 将是 7.4 之后的下一个版本。

            Branch Initial Release Active Support Until Security Support Until
            7.1 1 Dec 2016 2 years, 5 months ago 1 Dec 2018 5 months ago 1 Dec 2019 in 6 months
            7.2 30 Nov 2017 1 year, 5 months ago 30 Nov 2019 in 6 months 30 Nov 2020 in 1 year, 6 months
            7.3 6 Dec 2018 5 months ago 6 Dec 2020 in 1 year, 6 months 6 Dec 2021 in 2 years, 6 months

            ?#28304;?5.X 时代以来,核心团队希望每年发布一个新版本,在过去四年中他们成功维护了这么一个发布周期。通常每个新版本都会得到官方两年时间的积极支持,之后有一年仅提供安全修复,其目的是激励 PHP 开发人?#26412;?#21487;能保持更新。

            更加具体的发布与维护周期可以查看 PHP 官网的介绍:

            看到上边这个表,你可能会发?#32844;?#26412;号从 5 跳到了 7,那 PHP 6 去哪里了?

            顺便科普一下。其实早在 2005 年,PHP 社区就发起了 PHP 6,但由于实现 Unicode 面临的困难太大,项目最终流产,PHP 官方没有发布 PHP 6 GA,并且在 2010 年将 PHP 6 取消。虽然 PHP 6 项目取消了,但其大量已实现功能集成到了 PHP 5.X 中,包括 OOP 方面的改进,使得 PHP ?#29992;?#21521;过程跨越到面向对象。

            PHP 6 被取消了,但是之前对这个主要版本的研发都是以 PHP 6 的名义进行的,所以许多参考资料与书籍都是用“PHP 6”来指代该版本。官方担心这在放弃 PHP 6 之后会引起混乱,于是干脆不使用 PHP 6.X 版本号,直接从 5 跳到 7。

            详情可以查看官方?#24471;鰨?a href="https://wiki.php.net/rfc/php6">https://wiki.php.net/rfc/php6

            PHP 5 之后?#38405;?#22312;不断提高

            PHP 7.0 中,PHP 核心部分完全重写,带来了最新的 Zend 引擎,使得 PHP ?#38405;?#25552;升了两到三倍。

            作者引用了 https://kinsta.com/blog/php-benchmarks 的基准测试来?#24471;?#36825;一点,指出自 7.0 以来,PHP ?#38405;?#19968;直在提升,PHP Web 应用与其它语言的 Web 框架相?#20173;?#19968;些情况下?#38405;?#22909;很多。但他也表示:“当然 PHP 框架不会胜过 C 与 Rust,但比 Rails 或 Django 好得多,与 ExpressJS 相当。”

            有非常活跃的框架、包?#25512;?#21488;组成的语言生态

            提到 PHP 的框架,不得不说 WordPress,但是作者表示 WordPress 绝对不代表当前的 PHP 生态:“PHP 框架再也不仅仅只有 WordPress 了”。

            当前 PHP 中有两个主要的 Web 应用开发框架:SymfonyLaravel,还有 ZendYiiCakePHP 与 Code Igniter 等,此外还有不少较小的框架。

            Symfony 与 Laravel 都拥有庞大的包和软件生态,包括 admin 面板和 CRM、独立软件包、CI、分析器、Web socket 服务器、队列管理器与支?#37117;?#25104;?#21462;?/p>

            此外,近几年 PHP 异步框架也兴起了,SwooleAmp 与 ReactPHP 是其中的佼佼者,它们是用 PHP 或其它语言编写的框架?#22836;?#21153;器,用来运行真正的异步 PHP。

            作者认为衡量 PHP 生态当前状况的一?#22336;?#27861;是查看 Packagist 这个 PHP 主要软件包存储库的数据。通过以下趋势图,可以发现软件包数量?#25163;?#25968;增长,并且当前录入软件包有 223 217 个,总的安装?#30475;?#21040;了 14 827 204 847,PHP 生态已不再像以前那么弱小。 

            各?#32844;?#26412;的可用软件包的数量

            每月包被安装数

            此外,还可以看看这个 PHP 使用统计与市场定位最新数据:

            PHP 在不断发展,过去几年中添加了许多新特性

            尽管 async 与 await 这两个呼声极高的特性还没有实现,但是 PHP 这几年新特性不断出现,语言本身得到了各方面的改进。

            下边列出了一些关注度比?#32454;?#30340; PHP 新特性:

            短闭包,也称为箭头函数,这是一种在 PHP 中编写较短函数的方法。将闭包传递给 array_map 或 array_filter 等函数?#20445;?#23427;可以发挥极大的作用。

            // A collection of Post objects $posts = [/* … */];
            
            $ids = array_map(fn($post) => $post->id, $posts);

            空合并运算符,它类似于三元运算符,但左边的操作数行为类似于 isset,而不是仅使用其布尔值。这使?#20040;?#36816;算符对数组特别有用。它同时可在未设置变量时分配默认值。

            $undefined ?? 'fallback'; // 'fallback'
            
            $unassigned;
            $unassigned ?? 'fallback'; // 'fallback'
            
            $assigned = 'foo';
            $assigned ?? 'fallback'; // 'foo'
            
            '' ?? 'fallback'; // ''
            'foo' ?? 'fallback'; // 'foo'
            '0' ?? 'fallback'; // '0'
            0 ?? 'fallback'; // 0
            false ?? 'fallback'; // false

            Trait 是一种重?#20040;?#30721;的机制,它可以减少单继承的?#25215;?#38480;制。Traits 与类组合的语义定义了降低复?#26377;?#30340;方式,并避免了与多重继承和 Mixins 相关的典型问题。

            Trait 类似于类,但仅用于以细粒度和一致的方式对函数进行分组,它是?#28304;?#32479;继承的补充,可以实现行为的横向组合,类成员应用不需要继承。

            <?php
            trait ezcReflectionReturnInfo {
                function getReturnType() { /*1*/ }
                function getReturnDescription() { /*2*/ }
            }
            
            class ezcReflectionMethod extends ReflectionMethod {
                use ezcReflectionReturnInfo;
                /* ... */
            }
            
            class ezcReflectionFunction extends ReflectionFunction {
                use ezcReflectionReturnInfo;
                /* ... */
            }
            ?>

            属性类型化,类变量可以定义类型,比如:

            class A
            {
                public string $name;
                
                public Foo $foo;
            }

            扩展运算符,这是一种新语法,可以直接在调用中解压缩?#38382;?#27604;如:

            call_user_func_array([$db, 'query'], array_merge(array($query), $params));

            直接用新语法可扩展出数组 $params:

            $db->query($query, ...$params);

            JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中间表述,并以依赖于体系结构的机器码执行,也就是说托管代码的不再是 Zend VM,而是更为底层的 CPU。

            Foreign Function Interface,外部函数接口,它允许从纯脚本语言调用 C 函数、使用 C 数据类型,从而更有效地开发“系统代码”。对于 PHP,FFI 开辟了一种使?#20040;?PHP 编写 PHP 扩展和绑定到 C 库的方法。

            匿名类,用于创建简单的一次性对象:

            <?php
            
            // Pre PHP 7 code
            class Logger
            {
                public function log($msg)
                {
                    echo $msg;
                }
            }
            
            $util->setLogger(new Logger());
            
            // PHP 7+ code
            $util->setLogger(new class {
                public function log($msg)
                {
                    echo $msg;
                }
            });

            声明返回类型:

            <?php
            function sum($a, $b): float {
                return $a + $b;
            }
            
            // Note that a float will be returned.
            var_dump(sum(1, 2));
            ?>

            ?#32454;?#27169;式:

            <?php
            declare(strict_types=1);
            
            function sum($a, $b): int {
                return $a + $b;
            }
            
            var_dump(sum(1, 2));
            var_dump(sum(1, 2.5));
            ?>

            使 Libsodium 成为核心扩展,Libsodium 是一个现代?#29992;?#24211;,由安全专家精心选择的?#29992;?#31639;法组成,以避免侧信道漏洞。

            生成器,提供了一种简单、无样板实现迭代器的方法。

            各种开发工具在过去几年中已经成熟,并且保持增长

            最后一部分,作者分析了当前 PHP 开发工具也在不断成熟,并且保持增长。

            他以静态分析器为例,比如 PsalmPhan 与 PHPStan,这些工具将静态分析 PHP 代码并报告任何类型错误与可能存在的 bug。在某种程度上,它们提供的功能可以与 TypeScript 的相媲美,但是因为 PHP 现在不提供转换(transpile),所以不允许使用自定义语法。这意味着 PHP 开发需要依赖文?#25285;?#20294;其实 PHP 的创造者 Rasmus Lerdorf 曾经提到了向核心添加静态分析引擎的想法。

            受到 JavaScript 社区的启发,目前 PHP 也有在进行转换的相关研发,比如项目 Pre,它允许新的 PHP 语法转换为普通的 PHP 代码。虽然这个想法已经在 JavaScript 中被证明可行,但作者认为在 PHP 中,只有先提供了适当的 IDE 和静态分析支持,它才有可能实现。

            讲完了 PHP 当前的这些变化,作者最后没有以“PHP 是世界上最好的语言”作结语,相反,他是这样说的:

            All that being said, feel free to still think of PHP as a crappy language... I can say in confidence that I enjoy working with it.

            话虽如此,但是还要继续认为 PHP 是蹩脚的语?#38405;且?#26159;可以的。我可以很自信地说我?#19981;?PHP。

            ?#38431;?#25991;明?#33268;邸?/p>

            本站文章除注明转载外,均为本站原创或编译。?#38431;?#20219;何?#38382;?#30340;转载,但请务必注明出处,尊重他人劳动共创开源社区。
            转载请注明:文章转载自 OSCHINA 社区 [http://www.bswx.tw]
            本文标题:PHP 早已不是十年前的模样
            加载中

            精彩评论

            红薯
            红薯
            php 已经不是十年前的 php ,可 java 仍然是十年前的 java
            nnnm
            nnnm
            用PHP18年了,虽然,个人能力没什么长进,但是PHP长进了啊!哈哈哈哈!
            Robin3D
            Robin3D
            一门可以让你准时下班陪家人吃饭的语言,就是好语言
            曲空
            曲空
            ??PHP依旧是世界上最好的语言,没有之一。不接受反驳~
            eechen
            eechen
            这老外还可以,还知道有Swoole,证明是真的搞PHP的,而不像?#25215;?#26681;本没有深入了解过就对PHP指手画脚的人.

            最新评论(85

            椰汁菠萝
            有了node.js,还要php干啥
            小石头89898

            引用来自“三两?#19988;洹?#30340;评论

            Java对PHP说: 你的潜力很大
            邓肯对詹姆斯说:未来是你的
            j
            jungggle
            越来越没落了
            春兰都
            春兰都
            您们吵你们的,C程序员笑他的
            青菜番茄h
            青菜番茄h
            php不是最好的语言么?
            s
            sHuXnHs
            https://www.phalapi.net/ π框架了解一下
            苦寒竹
            苦寒竹

            引用来自“红薯”的评论

            php 已经不是十年前的 php ,可 java 仍然是十年前的 java

            引用来自“yywww”的评论

            10年是Java 7吧,现在是12; 只能?#30340;?#36824;是10年前的人

            引用来自“Jason909”的评论

            Java8还能再战几年

            引用来自“OSC_NcKnLY”的评论

            工具而已,发挥到极致(看使用者的能力了);都是完成生计手段,何必谁好谁坏,场景而定!多会几种语言也不是什么坏事!

            引用来自“yywww”的评论

            就说场景吧,国内有百分之多少的公司用php来做网站呢,php基本就这个场景了(别?#30340;?#20123;没有人用的场景),其他语言场景太多了。
            前后端分离以后,后端api的语言基本上不会选php了, java, golang, 甚至NodeJS优势大大的。

            引用来自“志田未来”的评论

            70%以上网站都用php
            前端端分离以后,web开发php份额也比:java、golang、python、node加起来还多。
            只会用php做web那是你能力不行,php做脚本、swoole网络编程 基本现在的phper都会了。
            能力更强可用c扩展php,什么不能做?
            最烦这种自己不行怪语言的渣渣。

            引用来自“msscn”的评论

            70%网站pho,你牛!这数据信手捏来的令我都不想说什么了

            引用来自“志田未来”的评论

            https://w3techs.com/technologies/overview/programming_language/all
            还说少了 79%

            引用来自“msscn”的评论

            php这两年的没落是不争的事实,哪怕100%的网站都是php写的

            引用来自“开源中国-首席村长”的评论

            这是行?#24471;?#33853;,并不是语言没落。现在国家对网站管控愈来愈?#24076;?#22823;部分网站都开不下去了,新开的网站也少。
            对的。像论坛站长,都转行做公众号了。本地政府也不希望本地有个民间论?#21576;?#20040;都可以发,什么都可?#20113;?#20809;。?#19981;?#31449;长们加个政府组织的网情群,然后做公众号,发发新闻类文章,偶尔发篇洗脑文章。
            我国网站真的被搞没落了。
            LongRaindy
            LongRaindy
            能把事情做好的就是好语言,不用管其他人怎么说。
            MGL_TECH
            MGL_TECH
            ?#19988;?#21482;能是模板引擎/脚步语言
            小小黄鸡
            小小黄鸡
            什么 php 还活着?
            返回顶部
            顶部
            广东快乐十分实时开奖

                  <output id="ilehw"><bdo id="ilehw"><nobr id="ilehw"></nobr></bdo></output>
                  <dl id="ilehw"><font id="ilehw"></font></dl>

                            <output id="ilehw"><bdo id="ilehw"><nobr id="ilehw"></nobr></bdo></output>
                            <dl id="ilehw"><font id="ilehw"></font></dl>
                              1. 河北十一选五技巧 新三人斗地主 足彩半全场单场彩票 河北体彩福彩开奖结果今天开奖结果查询 福利彩票幸运农场开奖结果 澳洲幸运5是哪个国家的 26期两码中特二码中特 天津十一选五36期 六合图库彩图118万众 26选5过滤 天津十一选五秘诀 重庆时时彩360彩票 中彩网开奖首页 双色球2019114期分析 澳洲幸运5官方时时彩开奖结果