时间:2022-11-03 07:05:51 | 浏览:1989
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 — just in time — 编译器虽然不总是在 Web 请求的上下文中,但是有望显着地提高性能。目前还没有完成任何准确的基准测试,但是肯定会到来。
如果您想进一步了解JIT对PHP的作用,可以阅读我写过的另一篇文章此处。
属性在其他语言中通常被称为 注解 ,提供一种在无需解析文档块的情况下将元数据添加到类中的方法。
快速浏览一下,这里有一份来自 RFC 的属性示例:
use AppAttributesExampleAttribute;
<<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;
}
}
如果您想深入了解属性如何工作以及如何构建自己的属性,您可以在此博客上阅读有关深入属性的信息。
尽管已经可以返回 self,但是 static 直到 PHP 8 才是有效的返回类型 。考虑到 PHP 具有动态类型的性质,此功能对于许多开发人员将非常有用。
class Foo
{
public function test(): static
{
return new static();
}
}
有人可能将其称为必要的邪恶:mixed 类型让许多人感觉十分混乱。然而,有一个很好的论据支持去实现它:缺少类型在 PHP 中会导致很多情况:
因为上述原因,添加 mixed 类型是一件很棒的事儿。mixed 本身代表下列类型中的任一类型:
请注意,mixed 不仅仅可以用来作为返回类型,还可以用作参数和属性类型。
另外,还需要注意,因为 mixed 类型已经包括了 null,因此 mixed 类型不可为空。下面的代码会触发致命错误:
// 致命错误:混合类型不能为空,null已经是混合类型的一部分。
function bar(): ?mixed {}
该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 ,而不必在对象上使用 get_class() ,它的工作方式跟 get_class() 相同。
$foo = new Foo();
var_dump($foo::class);
在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::createFromImmutable($immutableDateTime) 从 DateTimeImmutable 对象创建一个 DateTime 对象, 而另一种方法则更加取巧。通过添加
DateTime::createFromInterface()和
DatetimeImmutable::createFromInterface()现在有一种通用的方法可以将DateTime和DatetimeImmutable对象相互转换。
DateTime::createFromInterface(DateTimeInterface $other);
DateTimeImmutable::createFromInterface(DateTimeInterface $other);
作者 | Beau Beauchamp 译者 | 弯月出品 | CSDN(ID:CSDNnews)在流行文化的冲击下,也许很多人都不赞同本文表达的观点,但我毅然决定再一次逆流而上。我认为,虽然 PHP 百般受轻视,但这门编程语言的流行度比以
晓查 乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI当下,如果你打开搜索引擎,搜索关键词“PHP过时”,能找到714万个相关结果。这些结果之中,不乏有2016年、2018年的结果,说PHP已经过时了。现已2019年,这个曾经自称
PHP 是最流行的 Web 服务端编程语言,并且在 2019 年仍然很火。因此,我们将在这里盘点 2019 年七个最好的 PHP 框架。这里讨论的 PHP 框架主要用于工程实践,通常用于构建复杂、安全和可扩展的 Web 应用程序。在讨论最好
PHP 是服务器端脚本语言。您应当具备的基础知识在继续学习之前,您需要对以下知识有基本的了解:HTMLCSS如果您希望首先学习这些项目,请在我们的 首页 访问这些教程。PHP 是什么?PHP(全称:PHP:Hypertext Preproc
出品|开源中国文|御坂弟弟PHP 8.1.0 现已发布,该版本带来了许多改进和新功能。枚举使用枚举而不是一组常量并立即进行验证。只读属性只读属性不能在初始化后更改,比如,在为它们分配值后。它们可以用于对值对象和数据传输对象建模。First-
TIOBE 公布了 2021 年 11 月的编程语言排行榜。自 20 多年前 TIOBE 指数开始发布以来,PHP 一直常驻在榜单前十;然而最近,该语言已经开始在前十的边缘苦苦挣扎。TIOBE CEO Paul Jansen 称,“PHP
我已有将近二十年的编程经验,并使用过各种编程语言进行开发。在我以前做过的很多工作和现在正在做的这份工作中,我非常高兴能够将 PHP 作为核心编程语言。从第一次使用 PHP 工作开始,我就听到了关于 PHP 的各种抱怨,但与此同时我也看到了
PHP现在名声很糟糕,因为它曾经是“可怕”的。本文试着回答一些常见的关于 PHP 的断言,目的是向非技术人员解释,PHP 并不像许多人所说的那么糟糕。它是不是鼓励糟糕的实践?不再是了。过去,许多开发者被书本教授非常糟糕的实践,因此 PHP
犹记得,据 2001 年 7 月的 PHP 官方文档描述,“PHP 是有史以来最好的语言,没有之一。它快速,非常强大,而且免费。"不过,随着时间的迭代,不少开发者发现所谓世界上最好的语言 PHP,虽然能极大地提升性能,但是其功能不够完善最终
最近,我突然发现自己好像又在逆潮流而动。可能我的想法与很多朋友不同,我认为 PHP 这个编程语言界的“混蛋”比以往任何时候都更受欢迎。或许你会质疑——PHP 不是已经完蛋了吗?市面上已经出现了很多“更好”的编程语言,不是吗?答案显然是否定的