香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 113|回复: 20

PHP8到底是否能够一改PHP“颓势”?

[复制链接]

3

主题

7

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-12-25 10:33:36 | 显示全部楼层 |阅读模式
前言

       1.首先我们来谈论一下目前PHP所谓的“颓势”到底是什么?那么接下来我将会来揭秘为何一直在唱衰PHP。如果有一直关注过PHP发展的小伙伴应该就知道,PHP其实已经唱衰很多年了,但是事实上PHP的语言排名一直都在前十,基本上虽然有下降的趋势,但是一直都很稳固,对于优势的占有市场还是当之无愧的王者。


       2.在PHP获取零几年的世界第一时,那个时候的PHP是当之无愧的霸主,之后为何一直在唱衰呢?其实主要是因为之前是Google一直在研究PHP,后来由于Google开发自己的语言golang去了,导致PHP没有明面上的一个大厂在研发,只有PHP官方团队还在研发,所以就导致一直有不明白情况的小伙伴在唱衰PHP。但是首先我们可以来看一下PHP的优势是什么?一个语言到底是否会被淘汰决定于它是否还有价值。PHP的优点,开发快,成本低,入门简易,开源框架多,执行快,非常灵活。所以大部分中小型公司都是用PHP开发公司项目的,其实包括很多大厂都是PHP语言起步的,后续是因为一些业务的繁杂,才不得不接入java的,而且目前很多大厂都是有招聘PHP开发的。比如:腾讯王者荣耀、腾讯新闻等很多APP接口服务,腾讯很多项目的API接口、管理系统,百度贴吧、广告平台,新浪微博,阿里天猫商城前端,滴滴APP,头条,抖音新出的商城等,目前都是基于PHP+golang/java微服务的方式实现的,开发速度是java的3-5倍,并且占用内存同比java要少80%,一线互联网企业80%的互联网项目都是结合PHP来开发的,目前大厂都有在招聘PHP高端岗位,薪资都在20-50K左右。
       3.全球82.8%的网站是基于PHP开发,使用PHP可以实现成本低的高效开发,节约企业成本。如果你是PHP开发的小伙伴,那么恭喜你,你在前期的路会好走很多,只要世界上还有中小型企业,那么对于PHP的需求就不会减少。
       4.PHP语法是C语言语法,如果有编程语言经验基础,学习和上手速度非常快,结合开源程序进行开发,个人可以实现兼职接单,充分发挥个人人脉资源价值、还可以在各大平台接中小型企业的项目(82.8%的企业项目基于PHP开发)需求,根据技术级别和项目规模不等,一个人就可以单独搞定一个项目,一个项目的金额可以从5000-10万不等,是程序员的涨收入利器,这个是java、python这样的语言没有办法实现的,可以充分利用业余时间接单,实现财富增长。这也是前面有小伙伴说PHP是个人主义的一个好处,可以充分的发挥自己的优势。
      5.PHP8在性能上面也提升了许多,同时你也可以了解到PHP的一个职业发展路线,事实上单语言发展你是很那去突破22K+的,如果你达到了这个水平,那么你之后的发展道路就是服务端开发,后端开发,架构师了,不单单是PHP语言开发了。
      6.那么到底PHP是否会随着8的到来会有一波好转呢?8的出现确实更加的去优化了PHP的性能这块,同时也出现了很多新的特性,但是毕竟是第一个版本,是否马上会普及我们还待确认,如果到时候会比较好的效果的话,那么PHP8也会迅速扩大市场的。以下可以看我我整理的一些PHP8新特性。
      最后我们在说说PHP语言到底是否会被时代淘汰,或者随着时间的推移,PHP被其他语言吃掉了所有的市场。这里的话我希望小伙伴能够知道,如果真的有一天PHP被淘汰了,那么其他语言其实也会被淘汰的,如:
      7.PHP跟java很多地方其实都是共通的,如果真的有那么一天PHP要被时代淘汰了,那么请记住一定是PHP的优势不复存在了,PHP的劣势也被弥补了。那么PHP就可能被取代,但是你要知道如果你取代了PHP的优势,却没有解决劣势,那么它跟PHP有何区别?如果你取代了优势有弥补了劣势,那么还要你java干嘛?
很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,希望能够去帮助到小伙伴们,可以加入一下我创建的圈子【架构师之路】,里面有我分享的小白进阶到架构师学习资料以及路线
背景

PHP 8,PHP 的一个新的大版本,预计将于2020年12月3日发布,这意味着将不会有 PHP 7.5 版本。PHP8目前正处于非常活跃的开发阶段,所以在接下来的几个月里,情况可能会发生很大的变化。
在这篇文章中,我会维持一个最新的清单列表,列出预计会出现的新特性、性能提升和突破性的变化。由于 PHP 8 是一个新的大版本,因此您的代码被破坏的可能性更高。如果您始终保持运行 PHP 的最新版本,那么升级相对来说就会轻松很多,因为在7. *版本中,大多数重大更改均已弃用。
除重大更改外,PHP 8还带来了一些不错的新功能,比如说 JIT编译器, 联合类型, 属性,以及更多。
新特性
从新特性开始,请记住 PHP8 仍处于活动开发阶段,因此此列表将随着时间的推移而增长。
联合类型
考虑到 PHP 动态语言类型的特性,现在很多情况下,联合类型都是很有用的。联合类型是两个或者多个类型的集合,表示可以使用其中任何一个类型。
public function foo(Foo|Bar $input): int|float;
请注意,联合类型中不包含 void,因为void 表示的含义是“根本没有返回值”。 另外,可以使用 |null 或者现有的 ? 表示法来表示包含 nullable 的联合体 :
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;
JIT
JIT — just in time — 编译器虽然不总是在 Web 请求的上下文中,但是有望显着地提高性能。目前还没有完成任何准确的基准测试,但是肯定会到来。
如果您想进一步了解JIT对PHP的作用,可以阅读我写过的另一篇文章此处。
属性
属性在其他语言中通常被称为 注解 ,提供一种在无需解析文档块的情况下将元数据添加到类中的方法。
快速浏览一下,这里有一份来自 RFC 的属性示例:
use App\Attributes\ExampleAttribute;
<<ExampleAttribute>>
class Foo
{
<<ExampleAttribute>>
public const FOO = 'foo';
<<ExampleAttribute>>
public $x;
<<ExampleAttribute>>
public function foo(<<ExampleAttribute>> $bar) { }
}
<<PhpAttribute>>
class ExampleAttribute
{
public $value;
public function __construct($value)
{
$this->value = $value;
}
}
如果您想深入了解属性如何工作以及如何构建自己的属性,您可以在此博客上阅读有关深入属性的信息。
新增 static 返回类型
尽管已经可以返回 self,但是 static 直到 PHP 8 才是有效的返回类型 。考虑到 PHP 具有动态类型的性质,此功能对于许多开发人员将非常有用。
class Foo
{
public function test: static
{
return new static;
}
}
新增 mixed 类型
有人可能将其称为必要的邪恶:mixed 类型让许多人感觉十分混乱。然而,有一个很好的论据支持去实现它:缺少类型在 PHP 中会导致很多情况:

  • 函数不返回任何内容或返回空值
  • 我们需要多种类型的一种类型
  • 我们需要的是PHP中不能进行类型提示的类型
因为上述原因,添加 mixed 类型是一件很棒的事儿。mixed 本身代表下列类型中的任一类型:

  • array
  • bool
  • callable
  • int
  • float
  • null
  • object
  • resource
  • string
请注意,mixed 不仅仅可以用来作为返回类型,还可以用作参数和属性类型。
另外,还需要注意,因为 mixed 类型已经包括了 null,因此 mixed 类型不可为空。下面的代码会触发致命错误:
// 致命错误:混合类型不能为空,null已经是混合类型的一部分。
function bar: ?mixed {}
throw 表达式
该RFC将throw从一个语句更改为一个表达式,这使得可以在很多新地方抛出异常:
$triggerError = fn => throw new MyError;
$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');
弱映射
基于在 PHP 7.4 中新增的 弱引用 RFC,PHP 8 中新增了 WeakMaps(弱映射)的实现。 WeakMaps(弱映射)在保持对一些对象的引用的同时,并不会组织这些对象被垃圾回收机制处理 。
以ORM为例,它们通常实现保存对实体类的引用的缓存,从而提高实体类之间关联的性能。 只要缓存中存在对这些实体类的引用,那么这些类就无法被垃圾回收机制回收,尽管除了缓存中,已经没有别处再引用这些实体类,它们依然不会被垃圾处理机制处理。
如果这个缓存层使用了弱引用和弱映射,那么 PHP 将会在这些实体类没有任何其他引用时,对其进行垃圾回收。 尤其是对于 ORMs,它可以管理一个请求中的数百个(如果不是数千个)实体;弱映射可以提供一种更好的、对资源更友好的方式来处理这些对象。
下面是弱映射基本的例子,摘抄自 RFC :
class Foo
{
private WeakMap $cache;
public function getSomethingWithCaching(object $obj): object
{
return $this->cache[$obj]
??= $this->computeSomethingExpensive($obj);
}
}
允许对对象使用 ::class
一个很小但是很有用的新特性:现在可以在对象上使用 :: class ,而不必在对象上使用 get_class ,它的工作方式跟 get_class 相同。
$foo = new Foo;
var_dump($foo::class);
Non-capturing catches
在PHP 8 之前,无论何时你想要捕获一个异常,你都需要先将其存储到一个变量中,不管这个变量你是否会用到。通过 Non-capturing catches 你可以忽略变量,所以替换下面的代码:
try {
// Something goes wrong
} catch (MySpecialException $exception) {
Log::error("Something went wrong");
}
你现在可以这么做:
try {
// Something goes wrong
} catch (MySpecialException) {
Log::error("Something went wrong");
}
请注意,必须始终指定类型,不允许将 catch 留空,如果你想要捕获所有类型的异常和错误,需要使用 Throwable 作为捕获类型。
参数列表中的尾部逗号
当调用函数时已经支持尾部逗号,但是参数列表中仍然缺少尾随逗号支持。现在PHP8中允许这样做,这意味着您可以执行以下操作:
public function(
string $parameterA,
int $parameterB,
Foo $objectfoo,
) {
// …
}
从接口创建DateTime 对象
你已经可以使用 DateTime::createFromImmutable($immutableDateTime) 从 DateTimeImmutable 对象创建一个 DateTime 对象, 而另一种方法则更加取巧。通过添加DateTime::createFromInterface和DatetimeImmutable::createFromInterface现在有一种通用的方法可以将DateTime和DatetimeImmutable对象相互转换。
DateTime::createFromInterface(DateTimeInterface $other);
DateTimeImmutable::createFromInterface(DateTimeInterface $other);
<hr/>2020/11/30 更
HP 团队于2020 年 11 月 26 日宣布 PHP 8 正式发布!


PHP 8.0.0 目前是最新的主要版本,它引入了一些重大变更,其中最受关注的是 Just In Time (JIT) 编译器的加入,相比较 PHP 7.4 稳定版,PHP 8.0 在性能上大 约改进了 10%。
除此之外,PHP8.0 还增加了对属性、联合类型,静态返回类型和其他附加语言 的支持。 鉴于 PHP8.0 刚刚发布,传统的编译安装较为繁琐,因此 URLOS 为抢鲜体验的 小伙伴们提供了快速安装 PHP8.0 的方法
方法一:PHP8.0 网站环境一键安装命令

export domains="http://website-340429.com"export ports="80 8080"export dbPassword="dbPass1^ngsPfn5YXD" export sftpPassword="sftpPass1^2Ak68n9gKa" export appId="195"export nodeId="1" curl -O https://www.urlos.com/uai && sh uai
使用 SSH 终端登录主机,复制并粘贴以上命令即可一键安装 PHP8.0 网站环境
通过方法一安装 PHP8.0 网站环境之后,如需开启 JIT 编译器,请修改并部署 PHP8.0,然后按照方法二的方式勾选 opcache 扩展,在 php.ini 附加内容中填入 相关内容,重新部署即可。
方法二:通过 URLOS 应用市场安装 PHP8.0 网站环 境

首先通过命令行一键安装 URLOS 面板:
curl -O https://www.urlos.com/siu && sh siu
安装完成后登录 URLOS,在应用市场中搜索 php8.0,点击安装按钮:


如果想要抢鲜感受 JIT 编译器带来的极速体验,请在 PHP 配置中勾选 opcache 扩 展,并在“php.ini 附加内容”中填入:
opcache.enable=1
opcache.jit_buffer_size=100M


PHP8.0 网站环境部署完成后,在浏览器中输入 http://你的 ip:8080 打开网站, 查看 phpinfo


当看到这样一组信息,说明 JIT 编译器可以正常使用了


更多 PHP8.0 介绍请参考前文写的特性。
如果你喜欢我写的技术文章以及面试总结,欢迎关注收看我的视频,并且点赞、收藏、关注我哦。
我是luke,感谢你的关注!
很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,希望能够去帮助到小伙伴们,可以关注我私聊获取。也可以加入到我的圈子一起学习成长哦【架构师之路】点击链接申请加入圈子
回复

使用道具 举报

2

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-12-25 10:33:43 | 显示全部楼层
这里抄抄java,那里抄抄go,把自己搞成个四不像
回复

使用道具 举报

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-25 10:33:59 | 显示全部楼层
有一说一  
JIT :java和PHP底层jvm或者zend都是C写的  JIT作为设计思路  如果也算抄的话  那java的面向对象  也算抄C++的

至于携程这个东西  PHP官方版本似乎没有说过支持  也就国内社区自己做了扩张

PHP当然也有他的缺点  类似的java类似订阅在PHP就比较慢做到

不过我觉得至少PHP的开发团队心理还是有数的PHP适合擅长做什么  也没有太过激进的表现  还是在自己的领域继续加强做的更好

语言没有那个一定比那个好  根据团队自身的情况合理的利用语言 让不同的语言在自己擅长的位置做好自己的事情才是关键
回复

使用道具 举报

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-12-25 10:34:49 | 显示全部楼层
确实,数组是php的灵魂
回复

使用道具 举报

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-12-25 10:35:46 | 显示全部楼层
取长补短不是挺好的。
回复

使用道具 举报

5

主题

7

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2022-12-25 10:35:56 | 显示全部楼层
奥利给!在流量暴增的互联网项目中,密集型I/O语言PHP才是当之无愧的霸主,开发速度快、成本低,各大互联网企业项目流量入口都是基于PHP+golang微服务架构来实现高并发流量解决方案。
回复

使用道具 举报

5

主题

6

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-12-25 10:36:05 | 显示全部楼层
666
回复

使用道具 举报

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-25 10:36:13 | 显示全部楼层
有什么好争的呢,每种语言出现均有其擅长的场景。没有一种语言任何场景都擅长的。
回复

使用道具 举报

2

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-25 10:36:41 | 显示全部楼层
就硬吹呗
回复

使用道具 举报

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-12-25 10:36:54 | 显示全部楼层
前有javascript 后有 typescirpt ,node ,deno,一个语言前后端通吃不香?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-3-15 10:10 , Processed in 0.858280 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表