新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT > 程序开发 > 语言 > php

PHP 早已不是十年前的模样

时间:2019-05-15 09:40:23  来源:  作者:

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

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

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

文章中 Brent 关注于 PHP 这些年来发展得好的一面,他通过几下几点,说明“PHP 不再是十年前那一门糟糕的语言了”:

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

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

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

BranchInitial ReleaseActive Support UntilSecurity Support Until7.11 Dec 20162 years, 5 months ago1 Dec 20185 months ago1 Dec 2019in 6 months7.230 Nov 20171 year, 5 months ago30 Nov 2019in 6 months30 Nov 2020in 1 year, 6 months7.36 Dec 20185 months ago6 Dec 2020in 1 year, 6 months6 Dec 2021in 2 years, 6 months

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

PHP 在不断发展,早已不是十年前的模样

 

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

  • https://www.php.net/supported-versions.php

看到上边这个表,你可能会发现版本号从 5 跳到了 7,那 PHP 6 去哪里了?

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

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

详情可以查看官方说明:https://wiki.php.net/rfc/php6

PHP 5 之后性能在不断提高

PHP 7.0 中,PHP 核心部分完全重写,带来了最新的 Zend 引擎,使得 PHP 性能提升了两到三倍。

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

有非常活跃的框架、包和平台组成的语言生态

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

当前 PHP 中有两个主要的 Web 应用开发框架:Symfony 与 Laravel,还有 Zend、Yii、Cake 与 Code Igniter 这些,此外还有不少较小的框架。

Symfony 与 Laravel 都拥有庞大的包和软件生态,包括 admin 面板和 CRM、独立软件包、CI、分析器、Web socket 服务器、队列管理器与支付集成等。

此外,近几年 PHP 异步框架也兴起了,Swoole、Amp 与 ReactPHP 是其中的佼佼者,它们是用 PHP 或其它语言编写的框架和服务器,用来运行真正的异步 PHP。

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

PHP 在不断发展,早已不是十年前的模样

 

各种版本的可用软件包的数量

PHP 在不断发展,早已不是十年前的模样

 

每月包被安装数

PHP 在不断发展,早已不是十年前的模样

 

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

  • https://www.oschina.net/news/106695/w3techs-php-report-20190515

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

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

下边列出了一些关注度比较高的 PHP 新特性:

  • Short closures

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

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

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

$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
  • Traits

Trait 是一种重用代码的机制,它可以减少单继承的某些限制。Traits 与类组合的语义定义了降低复杂性的方式,并避免了与多重继承和 Mixins 相关的典型问题。

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

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

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

class A
{
 public string $name;
 
 public Foo $foo;
}
  • Spread operator

扩展运算符,这是一种新语法,可以直接在调用中解压缩参数,比如:

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

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

$db->query($query, ...$params);
  • JIT compiler:PHP 8 确认支持 JIT

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

  • FFI

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

  • Anonymous classes

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

<?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;
 }
});
  • Return type declarations

声明返回类型:

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

严格模式:

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

使 Libsodium 成为核心扩展,Libsodium 是一个现代加密库,由安全专家精心选择的加密算法组成,以避免侧信道漏洞。

  • Generators

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

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

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

他以静态分析器为例,比如 Psalm、Phan 与 PHPStan,这些工具将静态分析 PHP 代码并报告任何类型错误与可能存在的 bug。在某种程度上,它们提供的功能可以与 TypeScript 的相媲美,但是因为 PHP 现在不提供转换(transpile),所以不允许使用自定义语法。这意味着 PHP 开发需要依赖文档,但其实 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 是蹩脚的语言那也是可以的。我可以很自信地说我喜欢 PHP。
 



Tags:PHP   点击:()  评论:()
声明:本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
近日,WordPress释出了全新的5.0版,喜欢尝鲜的我自然会小试一把。首先进入网站后台,发现有新版本提示,恩,不错,直接提示了可以升级至5.0版。然后开始升级,大约等了一分钟左右,网站...【详细内容】
2019-07-18   PHP  点击:(5)  评论:(0)  加入收藏
Win10下配置Apache+php首先需要下载Apache和php软件包<br>分别在以下网站下载相应的软件包<br>https://www.apachelounge.com/download/<br>http://windows.php.net/downloa...【详细内容】
2019-07-11   PHP  点击:(6)  评论:(0)  加入收藏
1.伪静态的概念伪静态是地址栏看起来是静态,改变了地址的表现形式,但是后台处理的还是动态页面。2.伪静态的优缺点优点:在SEO方面,伪静态和静态页面是一样的,由于搜索引擎比较喜...【详细内容】
2019-07-10   PHP  点击:(9)  评论:(0)  加入收藏
1. SQL 注入我赌一包辣条,你肯定会看到这里。 SQL 注入是对您网站最大的威胁之一,如果您的数据库受到别人的 SQL 注入的攻击的话,别人可以转出你的数据库,也许还会产生更严重的...【详细内容】
2019-07-10   PHP  点击:(9)  评论:(0)  加入收藏
PHP 是一门弱类型语言,我们不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型。PHP 变量规则: PHP 变量以 "$" 符号开始,$符后面便是变量名; P...【详细内容】
2019-07-09   PHP  点击:(3)  评论:(0)  加入收藏
两者共同点都是实例化模型的,而两者不同点呢?一起来看一下:$User = D(&#39;User&#39;);括号中的参数User,对应的模型类文件的 HomeModelUserModel.class.php(我们假设当前模块为H...【详细内容】
2019-07-03   PHP  点击:(10)  评论:(0)  加入收藏
需要摒弃的3.X旧思想URL的变动首先对3.X的不严谨给开发者们带来的不正确的引导表示歉意,在5.0版本正式废除类似/id/1方式 可以通过&lsquo;get&rsquo;获取到&lsquo;id&rsquo;...【详细内容】
2019-07-03   PHP  点击:(11)  评论:(0)  加入收藏
关于支付的流程之类的就不做解释,大家可以自行搜索! 微信支付项目前提:本人用的是tp框架,PHP语言下载到微信平台提供的微信支付接口文件,放在了tp第三方类库vendor,命名为WxpayAP...【详细内容】
2019-07-02   PHP  点击:(10)  评论:(0)  加入收藏
一、前言php是一门很受欢迎的编程语言,被广泛应用于web开发领域,很多中小型网站都是使用php语言来开发的。由于php语言简单易学,近几年迎来了一大批自学者,小编也是其中之一。为...【详细内容】
2019-07-02   PHP  点击:(10)  评论:(0)  加入收藏
一、前言php是一门开源的脚本语言,它的语法简单实用,利于学习,被广泛的使用于Web开发领域。目前很多中小型网站都是使用php语言开发的,如果我们能学好php语言,也是很有前途的。今...【详细内容】
2019-07-02   PHP  点击:(8)  评论:(0)  加入收藏
大家按照自己的需求,可以参考一下。我本人比较钟爱PDO,可能是因为一直在用,但是据了解目前最推荐使用Mysqli。 第一种 mysql最简单的方式-mysql(面向过程)<?php$con = mysql_conn...【详细内容】
2019-07-01   PHP  点击:(15)  评论:(0)  加入收藏
Opcache是什么?Opcache是一种通过将解析的PHP脚本预编译的字节码(Operate Code)存放在共享内存中来避免每次加载和解析PHP脚本的开销,解析器可以直接从共享内存读取已经缓存的字...【详细内容】
2019-06-28   PHP  点击:(10)  评论:(0)  加入收藏
前段时间做个系统,打算用PHP做,从网上找部署编程环境的工具,以便后期部署到服务器长期使用。wamp安装后发现一段时间服务莫名不能正常运行,关键期间没有做任何操作,简单从网上找...【详细内容】
2019-06-26   PHP  点击:(43)  评论:(0)  加入收藏
phpstudy是一个集成的php服务器程序,包含了apache、php、mysql。一键安装,无需过多配置,非常适合学习php开发的新手使用,可以把精力更多的放在语言的学习上,而不是过多的关注环境...【详细内容】
2019-06-26   PHP  点击:(16)  评论:(0)  加入收藏
首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片。然后我们在后台写刷脸登陆的接口login我们要把拍照获取的照片存储到服务器。下面我们来看看login接口是...【详细内容】
2019-06-26   PHP  点击:(25)  评论:(0)  加入收藏
短闭包 RFC短闭包实现更简洁的单行书写。array_map(function (User $user) {return $user->id;}, $users)array_map(fn(User $user) => $user->id, $users)关于短闭包的一些...【详细内容】
2019-06-26   PHP  点击:(11)  评论:(0)  加入收藏
PHP的基本GC概念PHP语言同其他语言一样,具有垃圾回收机制。那么今天我们要为大家讲解的内容就是关于PHP垃圾回收机制的相关问题。希望对大家有所帮助。PHP strtotime应用经验...【详细内容】
2019-06-21   PHP  点击:(12)  评论:(0)  加入收藏
如何用PHP提升运行效率?1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。2、$row[&rsquo;id&rsquo;] 的速度是$row[id]的7倍。3、echo 比 print...【详细内容】
2019-06-20   PHP  点击:(11)  评论:(0)  加入收藏
1、下载PHP官网地址:http://php.net/下载地址:http://php.net/downloads.php 2、下载Windows Service Wrapper官网地址:https://github.com/kohsuke/winsw/下载地址:http://re...【详细内容】
2019-06-19   PHP  点击:(16)  评论:(0)  加入收藏
TP框架:ThinkPHP简单、快速,基于MVC和面向对象,易用性较高,是一款简洁实用的轻量级框架。Laravel框架:Lavavel一直秉承着优雅的原则,很好的支持了composer,实现了更丰富的扩展,社区...【详细内容】
2019-06-18   PHP  点击:(14)  评论:(0)  加入收藏
推荐资讯
相关文章
栏目更新
栏目热门