

PHP 8.4 ist ein gro?es Update der PHP -Sprache.
Es enth?lt viele neue Funktionen, wie Eigenschaftenhaken, asymmetrische Sichtbarkeit, eine aktualisierte DOM -API, Leistungsverbesserungen, Fehlerbehebungen und allgemeine Bereinigung.
Upgrade auf PHP 8.4 jetzt!Eigenschaftshaken
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
Eigenschaftshaken unterstützen berechnete Eigenschaften, die von IDES und statischen Analyse -Tools nativ verstanden werden k?nnen, ohne Docblock -Kommentare zu schreiben, die m?glicherweise nicht synchronisiert werden. Darüber hinaus erm?glichen sie eine zuverl?ssige Vor- oder Nachbearbeitung von Werten, ohne zu prüfen, ob in der Klasse ein übereinstimmender Getter oder Setter vorhanden ist.
Asymmetrische Sichtbarkeit
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}" ;
}
}
Der Umfang, um in eine Eigenschaft zu schreiben, kann nun unabh?ngig vom Bereich zum Lesen der Eigenschaft gesteuert werden, um die Notwendigkeit von Kesselplatten -Getter -Methoden zu verringern, um den Wert einer Eigenschaft freizulegen, ohne ?nderungen von au?en einer Klasse zu erm?glichen.
#[\Deprecated] Attribut
/**
* @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.
Neue Ext-DOM-Funktionen und HTML5-Unterstützung
$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)
Neue DOM-API, die Standards-konforme Unterstützung für das Parsen von HTML5-Dokumenten enth?lt, mehrere langj?hrige Compliance-Fehler im Verhalten der DOM-Funktionalit?t festlegt und mehrere Funktionen hinzugefügt werden, um die Arbeit mit Dokumenten bequemer zu gestalten.
Die neue DOM -API ist im Dom -Namespace verfügbar. Dokumente, die die neue DOM -API verwenden, k?nnen mit den Klassen DOMHTMLDOCUMENT und DOMXMLDOCUMENT erstellt werden.
Objekt -API für 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
Das neue BCMATHNumber-Objekt erm?glicht die objektorientierte Verwendung und Standardmathematikoperatoren bei der Arbeit mit willkürlichen Pr?zisionsnummern.
Diese Objekte sind unver?nderlich und implementieren die String -Schnittstelle, sodass sie in String -Kontexten wie Echo $ num verwendet werden k?nnen.
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"
Neue Funktionen array_find (), array_find_key (), array_any () und array_all () sind verfügbar.
PDO -Treiberspezifische Unterklassen
'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');
Neue Unterklassen Pdodblib, Pdofirebird, Pdomysql, Pdoodbc, Pdopgsql und Pdosqlite von PDO sind verfügbar.
new MyClass()->method()ohne Klammern
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());
Eigenschaften und Methoden eines neu instanziierten Objekts k?nnen jetzt zugegriffen werden, ohne den neuen Ausdruck in Klammern zu wickeln.
Neue Klassen, Schnittstellen und Funktionen
- Neue faule Objekte.
- Neue JIT -Implementierung basierend auf dem IR -Framework.
- Neue Request_Parse_body () Funktion.
- New bcceil(),>bcdivmod(),bcfloor(), and bcround() functions.
- New RoundingMode enum for round() with 4 new rounding modes TowardsZero,AwayFromZero, NegativeInfinity,and PositiveInfinity.
- Neue DateTime :: CreateFromTimestAMP (), DateTime :: getMicrosecond (), datetime :: setMicrosecond (), datetimeimmable:
- Neue MB_TRIM (), MB_LTRIM (), MB_RTRIM (), MB_UCFIRST () und MB_LCFIRST ().
- Neue Funktionen von pcntl_getCpu (), pcntl_getCpuaffinity (), PCNTL_Getqos_class (), PCNTL_Setns () und PCNTL_WAITID ().
- Neue ReflectionClassConstant :: isdeprecated (), ReflectionGenerator :: iscLosed () und ReflectionProperty :: IsDynamic () Methoden.
- Neue http_get_last_response_headers (), http_clear_last_response_Headers () und fpow () Funktionen.
- NEU XMLREADER :: Fromstream (), Xmlreader :: Fromuri (), Xmlreader :: Fromstring (), Xmlwriter :: ToStream (), Xmlwriter :: touri () und xmlwriter :: tomemory () Methoden.
- Neue Graphem_str_split () Funktion.
Abwertungen und Abw?rtskompatibilit?tsunterbrechungen
- IMAP, OCI8, PDO_OCI, and pspell extensions have been unbundled and moved to PECL.
- Implizit nullable Parametertypen sind jetzt veraltet.
- Die Verwendung von _ als Klassenname ist jetzt veraltet.
- Das Aufheben von Null auf die Leistung einer negativen Zahl ist jetzt veraltet.
- Wenn Sie den ungültigen Modus an rund () übergeben, wird ValueError ausgel?st.
- Klassenkonstanten aus Erweiterungsdatum, INTL, PDO, Reflexion, SPL, SQLite, XMLReader werden jetzt tippt.
- Die GMP -Klasse ist jetzt endgültig.
- Mysqli_set_charset_dir, mysqli_stmt_attr_prefetch_rows, mysqli_cursor_type_for_update, mysqli_cursor_type_scrollierbar und mysqli_type_interval konstants removed.
- MySQLI_Ping (), mySQLI_Kill (), mySQLI_Refresh () Funktionen, mysqli :: ping (), mysqli :: Kill (), Mysqli :: Refresh () Methoden und Mysqli_Refresh_* konstanten wurden depressiviert.
- stream_bucket_make_writable () und stream_bucket_new () geben nun eine Instanz von StreamBucket anstelle von STDClass zurück.
- Exit () Verhaltens?nderung.
- E_strict Constant wurde veraltet.
Für Quellen -Downloads von PHP 8.4 besuchen Sie bitte die Downloads Seite. Windows -Bin?rdateien finden Sie auf der PHP für Windows Website. Die Liste der ?nderungen wird in der aufgezeichnet Changelog.
Der Migrationsleitfaden ist im PHP -Handbuch erh?ltlich. Bitte wenden Sie sich an eine detaillierte Liste neuer Funktionen und rückw?rtskompatible ?nderungen.