

Php 8.4 adalah kemas kini utama bahasa PHP.
Ia mengandungi banyak ciri baru, seperti cangkuk harta, penglihatan asimetrik, API DOM yang dikemas kini, penambahbaikan prestasi, pembetulan pepijat, dan pembersihan umum.
Naik taraf ke Php 8.4 sekarang!Cangkuk harta
private string $languageCode;
private string $countryCode;
public function __construct ( string $languageCode, string $countryCode )
{
$this->setLanguageCode($languageCode);
$this->setCountryCode($countryCode);
}
public function getLanguageCode(): string {
return $this->languageCode;
}
public function setLanguageCode( string $languageCode ): void {
$this->languageCode = $languageCode;
}
public function getCountryCode(): string {
return $this->countryCode;
}
public function setCountryCode( string $countryCode ): void {
$this->countryCode = strtoupper($countryCode);
}
public function setCombinedCode( string $combinedCode ): void {
[ $languageCode, $countryCode ] = explode( '_', $combinedCode, 2 );
$this->setLanguageCode($languageCode);
$this->setCountryCode($countryCode);
}
public function getCombinedCode(): string {
return \sprintf( "%s_%s", $this->languageCode, $this->countryCode );
}
}
$brazilianPortuguese = new Locale( 'pt', 'br' );
var_dump( $brazilianPortuguese->getCountryCode() ); // BR
var_dump( $brazilianPortuguese->getCombinedCode() ); // pt_BR

public string $languageCode;
public string $countryCode {
set ( string $countryCode ) {
$this->countryCode = strtoupper($countryCode);
}
}
public string $combinedCode {
get => \sprintf( "%s_%s", $this->languageCode, $this->countryCode );
set ( string $value ) {
[ $this->languageCode, $this->countryCode ] = explode( '_', $value, 2 );
}
}
public function __construct( string $languageCode, string $countryCode ) {
$this->languageCode = $languageCode;
$this->countryCode = $countryCode;
}
}
$brazilianPortuguese = new Locale( 'pt', 'br' );
var_dump( $brazilianPortuguese->countryCode ); // BR
var_dump( $brazilianPortuguese->combinedCode ); // pt_BR
Cangkuk harta memberikan sokongan untuk sifat -sifat yang dikira yang dapat difahami secara asli oleh IDE dan alat analisis statik, tanpa perlu menulis komen docBlock yang mungkin keluar dari segerakkan. Selain itu, mereka membenarkan pra-pemprosesan nilai yang boleh dipercayai, tanpa perlu memeriksa sama ada getter atau setter yang sepadan ada di dalam kelas.
Penglihatan asimetrik
private string $version = '8.3' ;
public function getVersion(): string {
return $this->version;
}
public function increment(): void {
[ $major, $minor ] = explode( '.', $this->version );
$minor++;
$this->version = "{$major}.{$minor}" ;
}
}

public private(set) string $version = '8.4' ;
public function increment(): void {
[ $major, $minor ] = explode( '.', $this->version );
$minor++;
$this->version = "{$major}.{$minor}" ;
}
}
Skop untuk menulis kepada harta kini boleh dikawal secara bebas dari skop untuk membaca harta itu, mengurangkan keperluan untuk kaedah getter boilerplate untuk mendedahkan nilai harta tanpa membenarkan pengubahsuaian dari luar kelas.
#[\Deprecated] Atribut
/**
* @deprecated 8.3 use PhpVersion::getVersion() instead
*/
public function getPhpVersion(): string {
return $this->getVersion();
}
public function getVersion(): string {
return '8.3';
}
}
$phpVersion = new PhpVersion();
// No indication that the method is deprecated.
echo $phpVersion->getPhpVersion();

#[\Deprecated(
message: "use PhpVersion::getVersion() instead",
since: "8.4",
)]
public function getPhpVersion(): string {
return $this->getVersion();
}
public function getVersion(): string {
return '8.4';
}
}
$phpVersion = new PhpVersion();
// Deprecated: Method PhpVersion::getPhpVersion() is deprecated since 8.4, use PhpVersion::getVersion() instead
echo $phpVersion->getPhpVersion();
The new #[Deprecated] attribute makes PHP’s existing deprecation mechanism available to user-defined functions, methods, and class constants.
Ciri-ciri Ext-Dom Baru dan Sokongan HTML5
$dom->loadHTML(
<<<'HTML'
<main>
<article>PHP 8.4 is a feature-rich release!</article>
<article class="featured">PHP 8.4 adds new DOM classes that are spec-compliant, keeping the old ones for compatibility.</article>
</main>
HTML,
LIBXML_NOERROR,
);
$xpath = new DOMXPath($dom);
$node = $xpath->query('.//main/article[not(following-sibling::*)]')[0];
$classes = explode(" ", $node->className); // Simplified
var_dump(in_array("featured", $classes)); // bool(true)

<<<'HTML'
<main>
<article>PHP 8.4 is a feature-rich release!</article>
<article class="featured">PHP 8.4 adds new DOM classes that are spec-compliant, keeping the old ones for compatibility.</article>
</main>
HTML,
LIBXML_NOERROR,
);
$node = $dom->querySelector('main > article:last-child');
var_dump($node->classList->contains("featured")); // bool(true)
API DOM baru yang merangkumi sokongan patuh piawaian untuk menghuraikan dokumen HTML5, membetulkan beberapa pepijat pematuhan lama dalam tingkah laku fungsi DOM, dan menambah beberapa fungsi untuk membuat kerja dengan dokumen lebih mudah.
API DOM baru boleh didapati dalam ruang nama DOM. Dokumen yang menggunakan API DOM baru boleh dibuat menggunakan kelas domhtmldocument dan domxmldocument.
API OBJEK UNTUK BCMATH
$num2 = '2';
$result = bcadd($num1, $num2, 5);
echo $result; // '2.12345'
var_dump(bccomp($num1, $num2) > 0); // false

$num1 = new Number('0.12345');
$num2 = new Number('2');
$result = $num1 + $num2;
echo $result; // '2.12345'
var_dump($num1 > $num2); // false
Objek BCMathNumber baru membolehkan penggunaan objek berorientasikan objek dan pengendali matematik standard apabila bekerja dengan nombor ketepatan sewenang-wenangnya.
Objek -objek ini tidak berubah dan melaksanakan antara muka yang boleh dibina, jadi ia boleh digunakan dalam konteks rentetan seperti echo $ num.
New array_*() functions
foreach ( [ 'dog', 'cat', 'cow', 'duck', 'goose' ] as $value ) {
if ( str_starts_with($value, 'c') ) {
$animal = $value;
break;
}
}
var_dump($animal); // string(3) "cat"

[ 'dog', 'cat', 'cow', 'duck', 'goose' ],
static fn (string $value): bool => str_starts_with($value, 'c'),
);
var_dump($animal); // string(3) "cat"
Fungsi baru array_find (), array_find_key (), array_any (), dan array_all () tersedia.
Subkelas spesifik pemacu PDO
'sqlite:foo.db',
$username,
$password,
); // object(PDO)
$connection->sqliteCreateFunction(
'prepend_php',
static fn ($string) => "PHP {$string}",
);
$connection->query('SELECT prepend_php(version) FROM php');

'sqlite:foo.db',
$username,
$password,
); // object(Pdo\Sqlite)
$connection->createFunction(
'prepend_php',
static fn ($string) => "PHP {$string}",
); // Does not exist on a mismatching driver.
$connection->query('SELECT prepend_php(version) FROM php');
Subkelas baru PDODBLIB, PDOFIREBIRD, PDOMYSQL, PDOODBC, PDOPGSQL, dan PDOSQLITE PDO boleh didapati.
new MyClass()->method()tanpa kurungan
public function getVersion(): string {
return 'PHP 8.4';
}
}
var_dump(( new PhpVersion())->getVersion());

public function getVersion(): string {
return 'PHP 8.4';
}
}
var_dump(new PhpVersion()->getVersion());
Sifat dan kaedah objek yang baru diterapkan kini boleh diakses tanpa membungkus ungkapan baru dalam kurungan.
Kelas, Antara Muka dan Fungsi Baharu
- Objek malas baru.
- Pelaksanaan JIT baru berdasarkan rangka kerja IR.
- Fungsi Request_Parse_body () baru.
- New bcceil(),>bcdivmod(),bcfloor(), and bcround() functions.
- New RoundingMode enum for round() with 4 new rounding modes TowardsZero,AwayFromZero, NegativeInfinity,and PositiveInfinity.
- DateTime baru :: createFromTimeStamp (), datetime :: getMicRoSecond (), datetime :: setMicRoSecond (), datetimeImmutable :: createFromTimeStamp (), DateTimeImmutable :: getMicrosecond ()
- Baru mb_trim (), mb_ltrim (), mb_rtrim (), mb_ucfirst (), dan mb_lcfirst () fungsi.
- Baru pcntl_getcpu (), pcntl_getcuaffinity (), pcntl_getqos_class (), pcntl_setns (), dan pcntl_waitid ().
- ReflectionClassConstant :: isDEprecated (), reflectionGenerator :: isclosed (), dan reflectionProperty :: isdynamic () kaedah.
- Baru http_get_last_response_headers (), http_clear_last_response_headers (), dan fpow () fungsi.
- XmlReader baru :: dariStream (), xmlReader :: fromuri (), xmlReader :: fromString (), xmlWriter :: tostream (), xmlwriter :: touri (), dan xmlwriter :: tomemory () kaedah.
- Fungsi grapheme_str_split () baru.
Penamatan dan pemecahan keserasian ke belakang
- IMAP, OCI8, PDO_OCI, and pspell extensions have been unbundled and moved to PECL.
- Jenis parameter yang tidak dapat dibatalkan secara tersirat kini telah ditutup.
- Menggunakan _ sebagai nama kelas kini ditolak.
- Meningkatkan sifar kepada kuasa nombor negatif kini telah ditutup.
- Melewati mod tidak sah ke bulat () melemparkan ValueError.
- Pemalar kelas dari Tarikh Sambungan, INTL, PDO, Refleksi, SPL, SQLite, XMLReader diketik sekarang.
- Kelas GMP kini muktamad.
- Mysqli_set_charset_dir, mysqli_stmt_attr_prefetch_rows, mysqli_cursor_type_for_update, mysqli_cursor_type_scrollable, dan mysqli_type_interval telah dibuang.
- mysqli_ping (), mysqli_kill (), mysqli_refresh () fungsi, mysqli :: ping (), mysqli :: Kill (), mysqli :: refresh () kaedah, dan mysqli_refresh_* pemalar telah diturunkan.
- stream_bucket_make_writeable () dan stream_bucket_new () Sekarang kembalikan contoh streambucket dan bukannya stdclass.
- Keluar () Perubahan Kelakuan.
- Pemalar E_Strict telah ditutup.
Untuk muat turun sumber Php 8.4 sila lawati muat turun halaman. Binari Windows boleh didapati di PHP untuk Windows Tapak. Senarai perubahan dicatatkan di Changelog.
The Panduan Migrasi boleh didapati dalam manual PHP. Sila rujuk untuk senarai terperinci ciri-ciri baru dan perubahan yang tidak serasi.