new php,PHP: 新特性 - Manual
新特性
PHP 核心中的新特性
屬性添加限定類型
類的屬性中現在支持添加指定的類型。
publicint?$id;
publicstring?$name;
}?>
上面的例子中,會強制要求 $user->id 只能為 int
類型,同時 $user->name 只能為 string 類型。
箭頭函數
箭頭函數 提供了一種更簡潔的定義函數的方法。
$factor=10;$nums=array_map(fn($n)?=>$n*$factor,?[1,2,3,4]);//?$nums?=?array(10,?20,?30,?40);?>
有限返回類型協變與參數類型逆變
以下代碼將不會正常工作:
classBextendsA{}
classProducer{
public?functionmethod():A{}
}
classChildProducerextendsProducer{
public?functionmethod():B{}
}?>
只有在使用自動加載的情況下,才會有完整的差異支持。在一個文件內,只有非循環類型引用是可能的,因為在引用之前,所有的類都需要可用。
空合并運算符賦值
$array['key']???=computeDefault();//?等同于以下舊寫法if?(!isset($array['key']))?{$array['key']?=computeDefault();
}?>
數組展開操作
$parts=?['apple','pear'];$fruits=?['banana','orange',?...$parts,'watermelon'];//?['banana',?'orange',?'apple',?'pear',?'watermelon'];?>
數值文字分隔符
數字文字可以在數字之間包含下劃線。
6.674_083e-11;//?float299_792_458;//?decimal0xCAFE_F00D;//?hexadecimal0b0101_1111;//?binary?>
Weak references
Weak references allow the programmer to retain a reference to an object
that does not prevent the object from being destroyed.
允許從 __toString() 拋出異常
現在允許從 __toString()
拋出異常。之前的版本,將會導致一個致命錯誤。新版本中,之前發生致命錯誤的代碼,已經被轉換為
Error 異常。
CURL
CURLFile now supports stream wrappers in addition
to plain file names, if the extension has been built against libcurl >= 7.56.0.
Filter
The FILTER_VALIDATE_FLOAT filter now supports the
min_range and max_range
options, with the same semantics as FILTER_VALIDATE_INT.
FFI
FFI is a new extension, which provides a simple way to call
native functions, access native variables, and create/access
data structures defined in C libraries.
GD
Added the IMG_FILTER_SCATTER image filter
to apply a scatter filter to images.
Hash
Added crc32c hash using Castagnoli's polynomial.
This CRC32 variant is used by storage systems, such as
iSCSI, SCTP, Btrfs and ext4.
Multibyte String
Added the
OPcache
新增 緩存預加載 特性。
Regular Expressions (Perl-Compatible)
The flags argument, with support for the
PREG_OFFSET_CAPTURE and PREG_UNMATCHED_AS_NULL flags.
This influences the format of the matches array passed to to the callback function.
PDO
The username and password can now be specified as part of the PDO DSN for
the mysql, mssql, sybase, dblib, firebird and oci drivers. Previously this
was only supported by the pgsql driver. If a username/password is specified
both in the constructor and the DSN, the constructor takes precedence.
It is now possible to escape question marks in SQL queries to avoid them
being interpreted as parameter placeholders. Writing ??
allows sending a single question mark to the database and e.g. use the
PostgreSQL JSON key exists (?) operator.
PDO_SQLite
PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)
allows checking whether the statement is read-only, i.e. if it doesn't modify
the database.
PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true)
enables the use of SQLite3 extended result codes in
SQLite3
Added SQLite3::lastExtendedErrorCode()
to fetch the last extended result code.
Added SQLite3::enableExtendedResultCodes($enable = true),
which will make
Standard
strip_tags() with array of tag names
strip_tags($str, '
')
you can now write strip_tags($str, ['a', 'p']).
Custom object serialization
A new mechanism for custom object serialization has been added, which
uses two new magic methods: __serialize
and __unserialize.
The new serialization mechanism supersedes the
Serializable interface,
which will be deprecated in the future.
Array merge functions without arguments
array_merge(...$arrays).
proc_open(['php','-r','echo?"Hello?World\n";'],$descriptors,$pipes);?>
redirect and null descriptors.
<?php //?Like?2>&1?on?the?shellproc_open($cmd,?[1=>?['pipe','w'],2=>?['redirect',1]],$pipes);//?Like?2>/dev/null?or?2>nul?on?the?shellproc_open($cmd,?[1=>?['pipe','w'],2=>?['null']],$pipes);?>
argon2i(d) without libargon
總結
以上是生活随笔為你收集整理的new php,PHP: 新特性 - Manual的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结构体对齐详解
- 下一篇: LeetCode刷题——无重复字符的最长