quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2004/05/02 08:56:14

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Vergleichsoperatoren

  1. Weitere Vergleichsoperatoren
  2. Der Vergleichsoperator ===

1. Weitere Vergleichsoperatoren

Im Moment kennen wir nur == als Vergleichsoperator. Dieser ergibt dann true, wenn die Werte links und rechts gleich sind. Es gibt aber eine ganze Reihe weiterer Vergleichsoperatoren. Hier ist eine Liste der Vergleichsoperatoren.

Hier sind einige Beispiele

<?php
    $zahl1
= 3;
    
$zahl2 = 4;
    
$zahl3 = 4;
    
    
//        3          4
    
$xyz = ($zahl1 <  $zahl2);  // true
    
$xyz = ($zahl1 <= $zahl2);  // true
    
$xyz = ($zahl1 >  $zahl2);  // false
    
$xyz = ($zahl1 >= $zahl2);  // false
    
$xyz = ($zahl1 != $zahl2);  // true

    //        4          4
    
$xyz = ($zahl2 <  $zahl3);  // false
    
$xyz = ($zahl2 <= $zahl3);  // true
    
$xyz = ($zahl2 >  $zahl3);  // false
    
$xyz = ($zahl2 >= $zahl3);  // true
    
$xyz = ($zahl2 != $zahl3);  // false
?>

2. Der Vergleichsoperator ===

Die drei Gleichheitszeichen hintereinander sind keine Schreibfehler. Dieser Vergleichsoperator funktioniert so ähnlich wie wie der 'normale' Vergleichsoperator ==. Ein Vergleich mit === liefert erst dann true wenn Variableninhalt UND Variablentyp übereinstimmen. Hier ein Beispiel:

<?php
    $x
= "10"; // ein String mit dem Wert 10
    
$y = 10;   // eine Zahl mit dem Wert 10

    
var_dump($x == $y);  // gibt 'bool(true)' aus
    
var_dump($x === $y); // gibt 'bool(false)' aus
?>

Nun schön und gut, aber wofür braucht man sowas? Das beste Beispiel für diesen Gebrauch ist die Funktion strpos. Diese Funktion liefert eine Zahl zurück oder FALSE, je nachdem ob ein Teilstring gefunden wurde oder nicht (siehe Funktionsbeschreibung). Aber jetzt kann es ein Problem geben. Diese Funktion kann auch die Zahl 0 zurückliefern, um zu sagen "Der gesuchte Teilstring ist an Position 0 zu finden", was für den Anfang der Zeichenkette steht (0 wird in fast allen Programmiersprache als Anfangszahl genommen). Wenn wir jetzt prüfen wollen ob ein Teilstring in einem String vorhanden ist, würde man auf diese Idee kommen:

<?php
    $string
= "Ein langer String mit Inhalt";
    
$such = "Ein";

    if (
strpos($string, $such) != false) {
        echo
'gefunden';
    } else {
        echo
'nicht gefunden';
    }
?>

Wenn man jetzt diesen Code ausführt gibt es folgendes aus: nicht gefunden. Nur warum, mit dem bloßen Auge kann man erkennen, dass der Teilstring im anderen String vorhanden ist. Ich weiß nicht wie man diesen Effekt genau nennt, aber es hat was mit Typecasting zu tun, welches wir später durchnehmen. Diese Funktion liefert in diesem Fall die Integerzahl 0 zurück. Und jetzt kommt PHP und benutzt den einfachen Vergleich mit 0 und FALSE, und dieser ist.... false. Beweis:

<?php
    var_dump
(0 == false); // bool(true)
    
var_dump(0 == true);  // bool(false)
    // bei != entsprechend umgekehrt
?>

Nun, warum setzt PHP die Zahl 0 und FALSE auf die selbe Stufe? Da will PHP dem User etwas arbeit abnehmen. PHP denkt hier, dass diese 0 als FALSE gedeutet werden soll. Also benutzt PHP hier dieses angesprochene Typecasting und wandelt die Zahl 0 in FALSE um. Und dann steht da "false != false" und dann ist auch klar, warum der else-Teil ausgeführt wird.

Um diesen Effekt vorzubeugen gibt es nun === bzw. das Gegenteil davon !==.

<?php
    var_dump
(0 === false); // bool(false)
    
var_dump(0 === true);  // bool(false)
?>

Mit === achtet PHP nicht nur auf den Wert der Ausdrücke sondern auch noch auf den Typ der Ausdrücke und sieht hier, dass 0 eine Integerzahl ist und FALSE/TRUE ein Boolean-Wert ist. In unserem Beispiel benutzen wir nun !==.

<?php
    $string
= "Ein langer String mit Inhalt";
    
$such = "Ein";

    if (
strpos($string, $such) !== false) {
        echo
'gefunden';
    } else {
        echo
'nicht gefunden';
    }
?>

Da ich persönlich !== nicht so gut lesen kann benutzt ich lieber === und dreh die If- und Else-Teile um.

<?php
    $string
= "Ein langer String mit Inhalt";
    
$such = "Ein";

    if (
strpos($string, $such) === false) {
        echo
'Die Funktion liefert FALSE zurück, also wurde nix gefunden';
    } else {
        echo
'Die Funktion liefert eine Zahl zurück, die sagt an welcher ';
        echo
'Position der Teilstring gefunden wurde';
    }
?>

Wann PHP nun meint ob ein Wert nun FALSE ist oder nicht kommt im späteren Kapitel Typecasting.

Fragen zum aktuellen Thema

  1. Keine Fragen
Keine Fragen

In diesem Kapitel sind keine Fragen vorhanden.

Nach oben