PHP-Vergleich-Fehler

O Que Ando Aprendendo Nesta Caminhada Sobre a Terra

PHP-Vergleich-Fehler

Heute, Ich schrieb ein Skript in PHP beim stieß ich auf unerwartetes Verhalten in der Befehlszeile verwendet werden (zumindest von meiner Seite).
Das Skript sollte drei Argumente erhalten., das letzte von ihnen eine Liste mit einem oder mehreren numerischen Codes.
Versuch, diese letzte Argument zu überprüfen war ein anderes Ergebnis bekommen als gedacht.
Finden Sie das Code-Snippet, das war ich mit:

// test.php
if (php_sapi_name() == 'Cli') {
    $di = Isset($argv[1]) ? $argv[1] : Datum('Y-m-d'); // Initial Date
    $df = isset($argv[2]) ? $argv[2] : Datum('Y-m-d'); // Final Date
    $prods = isset($argv[3]) ? explodieren(',', $argv[3]) : Array(); // Codeliste

    ##### Überprüfen von
    // Initial Date
    if ($di != Datum('Y-m-d', strtotime($di))) {
        Echo "\n";
        Echo "FEHLER! Ungültige Fixierung!\n";
        Ausfahrt;
    }
    // Final Date
    if ($DF != Datum('Y-m-d', strtotime($DF))) {
        Echo "\n";
        Echo "ERRO! Ungültiges Datum endgültig!\n";
        Ausfahrt;    
    }

    // Codes
    if (Graf($Viehtreiber) >; 0) {
        foreach ($prods als $prod) {
            if ($Prod != (int)$Prod) {
                Echo "\n";
                Echo "FEHLER! Der CODE " . $Prod . " ist ungültig!\n" ;
                Ausfahrt;
            }
        }
    }
    Echo "FERTIG!";
}

Interessant ist, Wenn ich lief

# Php -f test.php 2015-12-10 2015-12-11 33b

Das Ergebnis war

# FERTIG

and reversing the condition to

        if ($Prod == (int)$Prod)

die erwartete Meldung anzeigen.
Ich versuchte eine separate Variable zuweisen und noch weiter funktioniert nicht.

            $Überprüfen Sie = (int) $Prod;
            if ($Prod !$check =) {

Whyyy??

Der Typvergleich

!==

cannot be used here, Da alle Argumente Zeichenfolgen werden. Wenn ich aber über diese bekam ich die Antwort.

So I did some command line tests and I check for the actually behavior of PHP Comparisons.

Wenn wir Dinge wie zu tun:

$Zeichenfolge == $integer

PHP will always do a CAST from String to the other type before comparison, also der Code

$Zeichenfolge == (int) $Zeichenfolge

will always return true, seit $Zeichenfolge wird geändert in int in both sides.

Zu dieser Art von Schwierigkeiten zu vermeiden, is necessary to have the same type in both sides of comparison.

            $Conf = (int) $Prod;
            if ($Prod != (Zeichenfolge) $conf) {
            // OR
            if ($Prod != (Zeichenfolge)(int)$Prod) {

Bis bald.

 ;

Hinterlasse eine Antwort

Ihre e-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *

Diese Seite benutzt Akismet, Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet wird.