Zur Navigation

if Statement mit ein, zwei oder drei Gleichheitszeichen?

1 Jörg Kruse

PHP-Anfänger stehen oft vor der Frage, wann man denn ein, zwei oder drei Gleichheitszeichen in einem if Statement verwendet.

Meistens sieht man Vergleiche mit zwei Gleichheitszeichen:

<?php

$a = 2;
$b = '2 Gleichheitszeichen';

if ($a == $b) {
    echo 'Ja';
} else {
    echo 'Nein';
}
echo '<br>';
echo $a;
echo '<br>';
echo '<br>';

Die Ausgabe hierbei ist folgende:

Ja
2

Da es sich bei den beiden Variablen um zwei verschiedene Typen handelt, nämlich bei $a um einen Integer und bei $b um einen String, wandelt PHP für einen Vergleich auch $b in einen Integer um. Hierbei wird die Zahl am Anfang des Strings extrahiert. Der Vergleich lautet also "2 == 2", weshalb ein "Ja" ausgegeben wird.

Wenn drei Gleichheitszeichen verwendet werden, müssen dagegen auch die Typen übereinstimmen:

<?php

$a = 3;
$b = '3 Gleichheitszeichen';

if ($a === $b) {
    echo 'Ja';
} else {
    echo 'Nein';
}
echo '<br>';
echo $a;
echo '<br>';
echo '<br>';

Ausgabe:

Nein
3

Der Integer 3 entspricht nicht dem String '3 Gleichheitszeichen', also wird ein "Nein" ausgegeben.

Ein einzelnes Gleichheitszeichen wird nun nicht für einen Vergleich, sondern für eine Zuweisung verwendet:

<?php

$a = 1;
$b = '1 Gleichheitszeichen';

if ($a = $b) {
    echo 'Ja';
} else {
    echo 'Nein';
}
echo '<br>';
echo $a;
echo '<br>';
echo '<br>';

Ausgabe:

Ja
1 Gleichheitszeichen

Die zweite Zeile der Ausgabe zeigt, dass $a nun den String von $b enthält. Lässt man versehentlich ein Gleichheitsszeichen weg, führt dies dazu, dass die erste Variable durch die zweite (ungewollt) überschrieben wird. Ein Fehler, der mitunter auch schon mal ein Sicherheitslücke öffnen kann!

Ein Vergleich wird aber auch hier durchgeführt: fehlt ein Vergleichsoperator == oder ===, so wird ein Vergleich mit der boolschen Variable true vorgenommen. Ausführlich könnte man hier also auch schreiben:

if (($a = $b) == true) {
    echo 'Ja';
} else {
    echo 'Nein';
}

24.05.2017 22:22

2 Jörg Kruse

Ein Beispiel, wann ein einzelnes Gleichheitszeichen Sinn machen kann. Dieser Vierzeiler:

<?php

$foo = get_bar('foo');
if ($foo) {
    echo '<p>' . $foo . '</p>';
}

... lässt sich verkürzen auf drei Zeilen:

<?php

if ($foo = get_bar('foo')) {
    echo '<p>' . $foo . '</p>';
}

Und ein Beispiel, wann ein vergessenes Gleichheitszeichen eine Sicherheitslücke öffnet

<?php

$password = 'geheim';
if ($password == $_POST['password']) {
    echo 'ich bin drin';
}

Hier erfolgt die Ausgabe 'ich bin drin' nur, wenn $password mit dem im POST-Parameter password übermittelten Wert übereinstimmt

<?php

$password = 'geheim';
if ($password = $_POST['password']) {
    echo 'ich bin drin';
}

Bei nur einem Gleichheitszeichen wird $password mit dem boolschen Wert true verglichen. Die Ausgabe ist in jedem Fall 'ich bin drin', egal welches Passwort übermittelt wurde!

31.05.2017 20:13

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]