dedlfix: Rechungen innerhalb Stringerzeugung geht nicht

Beitrag lesen

echo $begrüßung;

darf man keine Rechnungen innerhalb einer Stringdeklaration anstellen?

Doch, darf man. Man muss aber dabei die Operatorenrangfolge beachten oder explizit mit Klammern für die gewünschte Berechnungsreihenfolge sorgen. Der Stringverkettungsoperator und Strichrechnung haben die gleiche Priorität, also wird in deinem Fall stur von links nach rechts berechnet.

echo $acttreffer =

Ungewöhnlich, vielleicht auch unsinnig, aber syntaktisch korrekt.

'<p>xxx'.$_GET['s'].' xxx '.

Bis hier hin, verkettest du Strings.

($_GET['s']*1)

Durch das *1 machst du aus der Eingabe eine Zahl. Mit intval() oder einem Typecast würde deine Absicht hinter diesem Konstrukt deutlicher.

+($GLOBALS['conf_userresults']*1)

Bis jetzt hast du einen String, der nicht mit einer Zahl anfängt. Zu dem möchtest du eine Zahl addieren. Der String wird dazu implizit in eine Zahl umgewandelt. Da er nicht mit einer auswertbaren Zahl anfängt, ist sein nummerischer Wert 0. Dazu addierst du etwas.

.' von: '. number_format($GLOBALS['treffergesamt'],0,',','.').'</p>';

Anschließend fährt du mit Stringverkettung fort, also wird der Zahlenwert aus der Addition mit 0 in einen String umgewandelt.

Angezeigt wird in dem Falle nur ab:
$GLOBALS['conf_userresults']*1).' von: '. number_format($GLOBALS['treffergesamt'],0,',','.')

Und das ist das logische Ergebnis davon.

Wenn ich aber das einzeln deklariere, dann gehts:

Du hast nun eine andere Berechnungsreihenfolge.

Ach ja, keine Fehlermeldung wird ausgegeben, nur beim Testen habe ich mal das versucht:

Ist ja auch aus PHP-Sicht kein Fehler drin.

echo $acttreffer = '<p>xxx'.$_GET['s'].' xxx '.($_GET['s']*1)+5.' von: '. number_format($GLOBALS['treffergesamt'],0,',','.').'</p>';
Das mag er auch nicht dann gibts Syntaxfehler.

Im Zahlenkontext steht ein Punkt für das Dezimaltrennzeichen. Bei dir folgt aber ein String und keine Ziffern.

echo "$verabschiedung $name";