

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
privatestring$languageCode;
privatestring$countryCode;
public function__construct(string$languageCode,string$countryCode)
{
$this->setLanguageCode($languageCode);
$this->setCountryCode($countryCode);
}
public functiongetLanguageCode():string{
return$this->languageCode;
}
public functionsetLanguageCode(string$languageCode):void{
$this->languageCode=$languageCode;
}
public functiongetCountryCode():string{
return$this->countryCode;
}
public functionsetCountryCode(string$countryCode):void{
$this->countryCode=strtoupper($countryCode);
}
public functionsetCombinedCode(string$combinedCode):void{
[$languageCode,$countryCode]=explode('_',$combinedCode,2);
$this->setLanguageCode($languageCode);
$this->setCountryCode($countryCode);
}
public functiongetCombinedCode():string{
return\sprintf("%s_%s",$this->languageCode,$this->countryCode);
}
}
$brazilianPortuguese=newLocale('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=newLocale('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
privatestring$version='8.3';
public functiongetVersion():string{
return$this->version;
}
public functionincrement():void{
[$major,$minor]=explode('.',$this->version);
$minor++;
$this->version="{$major}.{$minor}";
}
}

public private(set) string$version='8.4';
public functionincrement():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] Attribute
/**
* @deprecated 8.3 use PhpVersion::getVersion() instead
*/
public functiongetPhpVersion():string{
return$this->getVersion();
}
public functiongetVersion():string{
return'8.3';
}
}
$phpVersion=newPhpVersion();
// No indication that the method is deprecated.
echo$phpVersion->getPhpVersion();

#[\Deprecated(
message:"use PhpVersion::getVersion() instead",
since:"8.4",
)]
public functiongetPhpVersion():string{
return$this->getVersion();
}
public functiongetVersion():string{
return'8.4';
}
}
$phpVersion=newPhpVersion();
// 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=newDOMXPath($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=newNumber('0.12345');
$num2=newNumber('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(( newPhpVersion())->getVersion());

public function getVersion(): string{
return'PHP 8.4';
}
}
var_dump(newPhpVersion()->getVersion());
Sifat dan kaedah objek yang baru diterapkan kini boleh diakses tanpa membungkus ungkapan baru dalam kurungan.
Kelas, Antara Muka dan Fungsi Baharu
- New Lazy Objects.
- New JIT implementation based on IR Framework.
- New request_parse_body() function.
- New bcceil(), bcdivmod(), bcfloor(), and bcround() functions.
- New RoundingMode enum for round() with 4 new rounding modes TowardsZero, AwayFromZero, NegativeInfinity, and PositiveInfinity.
- New DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), and DateTimeImmutable::setMicrosecond() methods.
- New mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), and mb_lcfirst() functions.
- New pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), and pcntl_waitid() functions.
- New ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), and ReflectionProperty::isDynamic() methods.
- New http_get_last_response_headers(), http_clear_last_response_headers(), and fpow() functions.
- New XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), and XMLWriter::toMemory() methods.
- New grapheme_str_split() function.
Penamatan dan pemecahan keserasian ke belakang
- IMAP, OCI8, PDO_OCI, and pspell extensions have been unbundled and moved to PECL.
- Implicitly nullable parameter types are now deprecated.
- Using _ as a class name is now deprecated.
- Raising zero to the power of a negative number is now deprecated.
- Passing invalid mode to round() throws ValueError.
- Class constants from extensions date, intl, pdo, reflection, spl, sqlite, xmlreader are typed now.
- GMP class is now final.
- MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, and MYSQLI_TYPE_INTERVAL constants have been removed.
- mysqli_ping(), mysqli_kill(), mysqli_refresh() functions, mysqli::ping(), mysqli::kill(), mysqli::refresh() methods, and MYSQLI_REFRESH_* constants have been deprecated.
- stream_bucket_make_writeable() and stream_bucket_new() now return an instance of StreamBucket instead of stdClass.
- exit() behavioral change.
- E_STRICT constant has been deprecated.
Untuk muat turun sumber Php 8.4 sila lawatimuat turunhalaman. Binari Windows boleh didapati diPHP untuk WindowsTapak. Senarai perubahan dicatatkan diChangelog.
ThePanduan Migrasiboleh didapati dalam manual PHP. Sila rujuk untuk senarai terperinci ciri-ciri baru dan perubahan yang tidak serasi.