Kategorie:PHP: Unterschied zwischen den Versionen

Aus MILLENNIUM ARTS ISP - Hilfe | FAQ
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Zeile 13: Zeile 13:
===`??` vs. `isset()` ab PHP 7.4.22 / PHP 8===
===`??` vs. `isset()` ab PHP 7.4.22 / PHP 8===


Ab PHP 7.4.22 und besonders in PHP 8 kann der Null-Coalescing-Operator (`??`) Kompatibilitätsprobleme in Anwendungen verursachen, die auf `isset()` basieren. `??` liefert einen Standardwert, wenn eine Variable nicht gesetzt oder `null` ist, während `isset()` prüft, ob eine Variable existiert und nicht `null` ist. In Systemen wie dem Advanced Sentry Filter (ASF) führt dies zu unterschiedlichem Verhalten bei Funktionen wie `asfGetValue()`, je nach PHP-Version (z. B. PHP 7.4 für pcs, PHP 8 für Maisp). ASF nutzt die Konstante `ISSET_COMPATIBILITY`, um zwischen `??` (Maisp) und `isset()` (pcs) zu wechseln.
In PHP-Webentwicklung ist es wichtig, sicher mit Variablen umzugehen, die möglicherweise nicht existieren oder leer sind, z. B. bei Formulareingaben oder Konfigurationsdaten. Der Null-Coalescing-Operator (`??`) und die Funktion `isset()` helfen dabei, Standardwerte zu setzen und Fehler zu vermeiden. `??` ist eine moderne, kurze Schreibweise, während `isset()` in älteren PHP-Versionen häufiger war. Ab PHP 7.4.22 und besonders in PHP 8 können Unterschiede zwischen diesen Ansätzen Kompatibilitätsprobleme verursachen, da `??` direkt einen Wert liefert, wenn eine Variable nicht gesetzt oder `null` ist, während `isset()` prüft, ob eine Variable existiert und nicht `null` ist. Dies betrifft vor allem Anwendungen, die zwischen PHP-Versionen (z. B. 7.4 und 8) wechseln, und erfordert eine Anpassung, um robusten Code zu gewährleisten.


'''Beispiel:'''
'''Beispiel:'''
<source lang="php">
<source lang="php">
define('ISSET_COMPATIBILITY', 0); // 0 für ?? (PHP 8+), 1 für isset() (PHP 7.4)
define('USE_ISSET', 0); // 0 für ?? (PHP 8+), 1 für isset() (PHP 7.4)


function asfGetValue($value, $default = '') {
function getConfig($value, $default = '') {
     if (ISSET_COMPATIBILITY) {
     if (USE_ISSET) {
         return isset($value) ? $value : $default; // Älteres Verhalten
         return isset($value) ? $value : $default; // Älteres Verhalten
     }
     }
Zeile 27: Zeile 27:


// Beispielaufruf
// Beispielaufruf
$config = ['settings' => ['mode' => 'mediawiki']];
$shop = ['theme' => 'dark'];
$mode = asfGetValue($config['settings']['mode'], 'bpm2');
$theme = getConfig($shop['theme'], 'light');
echo $mode; // Ausgabe: mediawiki
echo $theme; // Ausgabe: dark


// Problemfall: Nicht gesetzte Variable
// Problemfall: Nicht gesetzte Variable
$missing = asfGetValue($config['missing']['key'], 'fallback');
$currency = getConfig($shop['currency'], 'EUR');
echo $missing; // ?? gibt 'fallback', isset() könnte Fehler auslösen
echo $currency; // ?? gibt 'EUR', isset() könnte Fehler auslösen
</source>
</source>

Version vom 24. April 2025, 17:05 Uhr


Informationen folgen in Kürze - es findet aktuelle eine Datenübernahme statt.

Funktionen

PHP mail() mit Umlauten

Nicht-kodierte Umlaute in E-Mails sind grundsätzlich nicht erlaubt und entsprechen nicht dem RFC. E-Mails können deswegen von Empfängern (insbes. GMX, Gmail & Co, die sehr streng sind) abgelehnt werden. Auf php.net gibt es dazu sowohl Hinweise auf den RFC, als auch weiter unten ein Beispiel zur korrekten Kodierung von deutschen Umlauten mit der PHP mail() Funktion.

Kompatibilität

`??` vs. `isset()` ab PHP 7.4.22 / PHP 8

In PHP-Webentwicklung ist es wichtig, sicher mit Variablen umzugehen, die möglicherweise nicht existieren oder leer sind, z. B. bei Formulareingaben oder Konfigurationsdaten. Der Null-Coalescing-Operator (`??`) und die Funktion `isset()` helfen dabei, Standardwerte zu setzen und Fehler zu vermeiden. `??` ist eine moderne, kurze Schreibweise, während `isset()` in älteren PHP-Versionen häufiger war. Ab PHP 7.4.22 und besonders in PHP 8 können Unterschiede zwischen diesen Ansätzen Kompatibilitätsprobleme verursachen, da `??` direkt einen Wert liefert, wenn eine Variable nicht gesetzt oder `null` ist, während `isset()` prüft, ob eine Variable existiert und nicht `null` ist. Dies betrifft vor allem Anwendungen, die zwischen PHP-Versionen (z. B. 7.4 und 8) wechseln, und erfordert eine Anpassung, um robusten Code zu gewährleisten.

Beispiel:

define('USE_ISSET', 0); // 0 für ?? (PHP 8+), 1 für isset() (PHP 7.4)

function getConfig($value, $default = '') {
    if (USE_ISSET) {
        return isset($value) ? $value : $default; // Älteres Verhalten
    }
    return $value ?? $default; // Modernes Verhalten
}

// Beispielaufruf
$shop = ['theme' => 'dark'];
$theme = getConfig($shop['theme'], 'light');
echo $theme; // Ausgabe: dark

// Problemfall: Nicht gesetzte Variable
$currency = getConfig($shop['currency'], 'EUR');
echo $currency; // ?? gibt 'EUR', isset() könnte Fehler auslösen

Diese Kategorie enthält zurzeit keine Seiten oder Medien.