Wieso funktioniert echo $.... nicht mehr?

Hallo zusammen
Seit heute funktioniert diese echo Ausgabe bei Script Testen nicht mehr, habe ich einen Denkfehler ?

$ips_variable_id = 51670; // ID deiner IP-Symcon Variable

// Aktuellen Wert von IP-Symcon abrufen (0 oder 1)
$aktuellerWert = GetValueBoolean($ips_variable_id);

echo $aktuellerWert;

Das hat aber schon funktioniert ?!?!?
lg RIchard

Was steht davor und was danach?
Welcher Fehler kommt, oder kommt einfach gar nichts? Wenn du false in der Variable $aktuellerWert hast, dann kommt nichts. Ich verwende in so einem Fall gerne var_dump();

Mit dem kurzen Script wollte ich echo testen.
Also mehr gibts nicht.
Geht aber nicht ?

<?php
$variable=false;
echo "False: ".$variable.PHP_EOL;
var_dump($variable);
$variable=true;
echo "True: ".$variable.PHP_EOL;
var_dump($variable);

image
Wie du bei der Ausgabe siehst, siehst du nichts :smiley:
echo false; ergibt keine Ausgabe. echo true; ergibt 1.
False ist eigentlich ein NULL Wert. Bit=0.

Ahhhhhhhh … also wenn die boolean variable auf false/0 steht kommt keine Ausgabe … auch sehr speziell :wink: … gibt es eine Möglichkeit für eine Ausgabe ?

Ja, mit einem IF

if ($aktuellerWert) echo "True"; else echo "False";

Ich vergleiche in einem Script den bool Wert mit einem bool Wert eines externen Systems.
Dort bekomme ein true oder false.
IPS speichert aber eine 1 oder 0.
Mit dem echo bin ich dann dahinter gekommen warum der Vergleich nicht funktioniert hat.
Wobei jetzt weiss ich es ja :wink:
lg Richard

man kann bei der Ausgabe immer noch var_export verwenden.

echo var_export($variable);

1 „Gefällt mir“

Nein!
IPS speichert auch true/false.
Aber ein echo will einen String und darum konvertiert PHP den bool zu einen String. Ein false wird dann zu einem leeren String.
Siehe PHP Konvertierung zu String.

Ein bool true -Wert wird in den String „1“ umgewandelt. bool false wird in „“ (den leeren String) umgewandelt. Dies ermöglicht es, zwischen bool- und String-Werten hin und her zu konvertieren.

Michael

Eine letzte Frage dazu:
Ich lese per XML-Api einen Wert aus:

// XML-API URL erstellen
$url = "http://xxx.xxx.xxx.xxx:80/addons/xmlapi/state.cgi?sid=xxxxxxxxxx&datapoint_id=4711";

// XML-Daten als String abrufen
$xml = simplexml_load_file($url);

ein print_r($xml); ergibt:

SimpleXMLElement Object
(
    [datapoint] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [ise_id] => 4711
                    [value] => false
                )

        )

)

dann extrahiere ich den Wert mit:

// Wert aus XML extrahieren (true oder false)
$valueXml = $xml->datapoint->attributes()->value;

Das ergibt ein „false“ als string.

Aber wieso ergibt ein:

// Wert aus XML extrahieren (true oder false)
$valueXml = (bool) $xml->datapoint->attributes()->value;

dann eine „1“ als bool ???
lg Richard

Benutze nicht print_r (oder Echo) sondern var_dump.
Dann wird auch der Typ mit ausgegeben.
Ob value ein String oder bool ist, siehst du in deinem print_r nicht.
Michael