聯合型別(Union Types)
可以宣告變數可能的型別,語法糖 = 雞肋,舊版本不宣告就是,
class Number {
private int|float $number;
public function setNumber(int|float $number): void {
$this->number = $number;
}
public function getNumber(): int|float {
return $this->number;
}
}
添加了 WeakMap
允許陣列中的 key 放入物件(雞肋),$map[$obj] = 42;,
添加了 ValueError 類,
當函式或方法接收到具有正確型別的引數(錯誤型別應引發 TypeError 但值不合適時,將引發 ValueError ,
類的變更、使用
1、可變引數繼承(雞肋),允許
class A {
public function method(int $many, string $parameters, $here) {}
}
class B extends A {
public function method(...$everything) {}
}
2、后期靜態系結(LSB)(有用),對框架級別的封裝、一些工廠設計模式有用,RFC
class Test {
public function create(): static {
return new static();
}
}
3、現在可以使用以下方法獲取物件的類名稱 RFC
$object::class. 等價 get_class($object).
4、現在,new 和 instanceof 可以與任意運算式一起使用,使用
new(expression)(... $args) 和 $obj instanceof(expression),RFC
5、現在允許寫,RFC
Foo::BAR::$baz
6、添加 Stringable 介面(作用一般,用在視圖模板封裝),RFC
只要類實作了__toString,那么這類自動實作了 Stringable 介面,
class Foo
{
public function __toString(): string
{
return 'foo';
}
}
function bar(Stringable $stringable) { /* 雖然Foo沒有實作Stringable,但是這里正常的, */ }
bar(new Foo());
bar('abc');
7、trait 現在可以定義抽象的私有方法,
現在可以將 throw 用作運算式,
原來的 throw 是陳述句,必須用例如 if 判斷后獨立拋出,(用處多)
// $value is non-nullable. $value = https://www.cnblogs.com/a609251438/p/$nullableValue ?? throw new InvalidArgumentException(); 允許在引數串列中使用逗號結尾
雞肋中的雞肋,無用處
class Uri {
private function __construct(
?string $scheme,
?string $user,
?string $pass,
?string $host,
?int $port,
string $path,
?string $query,
?string $fragment // <-- ARGH!
) {
...
}
}
現在可以撰寫 catch(Exception)來捕獲例外而不將其存盤在變數中,RFC
如果用不到例外資訊可以不設變變數,減少記憶體?
try {
changeImportantData();
} catch (PermissionException) {
echo "You don't have permission to do this";
}
增加了對混合型別 Mixed 的支持
這個 RFC 內容挺多的,建議進去看示例,
class A
{
public function foo(int $value) {}
}
class B extends A
{
// Parameter type was widened from int to mixed, this is allowed
public function foo(mixed $value) {}
}
增加了對注解 Annotations 的支持 RFC
這個功能應該期待很久了,多數用在配置,路由、事件、ORM 映射定義等等;很有用,
class Foo
{
<<ORM\Column(ORM\Column::T_INTEGER)>>
protected $height;
<<ExampleAttribute>>
public function foo(<<ExampleAttribute>> $bar) { }
}
添加了對建構式屬性提升的支持(在建構式簽名), RFC
語法糖,減少 Getters and Setters 代碼,說實話,這部分代碼還不如和 ide 開發商交涉,支持和 java 一樣快捷生成更好,還減少學習成本,有用處,但不重要,雞肋到普通之間,
// From:
class Test {
public function __construct(public Type $prop = DEFAULT) {}
}
// 等價于:
class Test {
public Type $prop;
public function __construct(Type $prop = DEFAULT) {
$this->prop = $prop;
}
}
即時(JIT)編譯器,屬于性能改進,
PHP7 就有了,但是沒有正式啟用和發布,PHP8 的 JIT 是一個比較重要的功能
大資料 & 密集計算,php 沒有生態,而且因為 php 不支持執行緒,是多行程模型并發的(在利用多核 cpu 時,無法共享物件 + 語柄資源),本身就不適合密集計算,
更多PHP內容請訪問:
騰訊T3-T4標準精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個臺階(持續更新)?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17440.html
標籤:PHP
上一篇:RabbitMQ譯文 — 遠程程序呼叫(Remote procedure call (RPC))
下一篇:php抽獎功能
