bessere Vorgehensweise möglich?
Matthias Apsel
- php
- programmiertechnik
Hallo alle,
ich habe mehrfach folgende Konstruktion
$foo_f = $foo > 0 ? number_format($foo,0,',','.') : "";
Ziel ist es, ein (formatiertes) Ergebnis nur anzuzeigen, wenn es größer als Null ist.
Gibt es für den Teil
$foo_f = $foo > 0 ? $foo : "";
eine geschicktere Möglichkeit?
Bis demnächst
Matthias
@@Matthias Apsel
Ziel ist es, ein (formatiertes) Ergebnis nur anzuzeigen, wenn es größer als Null ist.
Kontext? Auf einer Webseite?
Gibt es für den Teil
$foo_f = $foo > 0 ? $foo : "";
eine geschicktere Möglichkeit?
<span>
<?php if ($foo > 0): ?>
$foo
<?php endif; ?>
</span>
bzw.
<?php if ($foo > 0): ?>
<span>
$foo
</span>
<?php endif; ?>
LLAP 🖖
ich habe mehrfach folgende Konstruktion
Gibt es […] eine geschicktere Möglichkeit?
Ich wüsste nicht wie. Du könntest höchstens eine Funktion dafür schreiben, aber daran hast du bestimmt auch schon gedacht.
function format(float $foo) : string
{
return $foo > 0 ? number_format($foo, 0, ',', '.') : '';
}
Hello Matthias,
ich habe mehrfach folgende Konstruktion
$foo_f = $foo > 0 ? number_format($foo,0,',','.') : "";
Ziel ist es, ein (formatiertes) Ergebnis nur anzuzeigen, wenn es größer als Null ist.
Gibt es für den Teil
$foo_f = $foo > 0 ? $foo : "";
eine geschicktere Möglichkeit?
Mut zu einer echten Funktion?
Das würde vermutlich auch leichter lesbar sein, obwohl es nur das Gleiche bewirkt. Ich bin kein Freund von cryptischen Einzeilern.
Glück Auf
Tom vom Berg
Hallo Tom,
Mut zu einer echten Funktion?
wurde ja schon vorgeschlagen.
Das würde vermutlich auch leichter lesbar sein, obwohl es nur das Gleiche bewirkt. Ich bin kein Freund von cryptischen Einzeilern.
Das kommt drauf an. [tm]
Wenn die gesamte Anweisung kompakt und übersichtlich ist, so wie hier, bin ich ein großer Freund von Einzeilern. Da sieht man sowohl die Bedingung, als auch die Zuweisung(en) auf einen Blick.
Bei einem Funktionsaufruf steht dagegen ein Teil der Information an einer anderen Stelle. Das finde ich erst dann günstiger, wenn die Funktion selbst relativ umfangreich und komplex wird, also deutlich über einen Einzeiler hinausgeht.
Schönen Sonntag noch,
Martin
Hello Martin,
Mut zu einer echten Funktion?
wurde ja schon vorgeschlagen.
War auf meinem Display noch nicht angekommen ;-)
Das würde vermutlich auch leichter lesbar sein, obwohl es nur das Gleiche bewirkt. Ich bin kein Freund von cryptischen Einzeilern.
Das kommt drauf an. [tm]
Wenn die gesamte Anweisung kompakt und übersichtlich ist, so wie hier, bin ich ein großer Freund von Einzeilern. Da sieht man sowohl die Bedingung, als auch die Zuweisung(en) auf einen Blick.
Bei einem Funktionsaufruf steht dagegen ein Teil der Information an einer anderen Stelle. Das finde ich erst dann günstiger, wenn die Funktion selbst relativ umfangreich und komplex wird, also deutlich über einen Einzeiler hinausgeht.
Man muss diese Zeile dann aber überall vollständig und richtig (aus dem Gedachtnis) wieder hinschreiben, wo man sie benötigt.
Soll nun z. B. anstelle von "" eine einzelne "0" oder ein "n/v" erscheinen, musst Du ggf. an diversen Stellen nachbessern.
Glück Auf
Tom vom Berg
Hallo,
Man muss diese Zeile dann aber überall vollständig und richtig (aus dem Gedachtnis) wieder hinschreiben, wo man sie benötigt.
Soll nun z. B. anstelle von "" eine einzelne "0" oder ein "n/v" erscheinen, musst Du ggf. an diversen Stellen nachbessern.
ja, ich habe das Schlüsselwort mehrfach im OP überlesen und bin deshalb von einem einzelnen Vorkommen ausgegangen. Dann passt meine Argumentation natürlich nicht mehr so richtig.
Ciao,
Martin
@@TS
$foo_f = $foo > 0 ? number_format($foo,0,',','.') : "";
Ziel ist es, ein (formatiertes) Ergebnis nur anzuzeigen, wenn es größer als Null ist.
Gibt es für den Teil
$foo_f = $foo > 0 ? $foo : "";
eine geschicktere Möglichkeit?
Mut zu einer echten Funktion?
Welche aber wohl nicht nur diesen Teil enthalten sollte, sondern auch das number_format($foo,0,',','.')
.
Scheint ja ein Formatierungsaufgabe zu sein: Gibt die Zahl mit Tausendertrennzeichen formatiert aus, wenn positiv, ansonsten nichts.
Wenn eine Templatesprache verwendet wird, wäre die Filterfunktion dort richtig aufgehoben, nicht im PHP. Die Backendlogik muss von der gewünschten Ausgabe nichts wissen, die berechnet nur den Wert von $foo
. Im Template steht sowas wie {{ $foo|myFilter }}
.
LLAP 🖖
Hallo Gunnar,
Wenn eine Templatesprache verwendet wird,
PHP ist eine Template-Sprache (ja ok, es gibt bessere).
Und eine Backend-Sprache.
Bei gutem Design trennt man die Module für Backend und Template. Und baut sich Helper, so wie dein myFilter, die sich um die Aufgabe kümmern. Also das, was Matthias gemacht hat.
Rolf
@@Rolf B
Wenn eine Templatesprache verwendet wird,
PHP ist eine Template-Sprache
Ich hätte genauer formulieren sollen „Wenn eine dedizierte Templatesprache verwendet wird“.
Bei gutem Design trennt man die Module für Backend und Template. Und baut sich Helper, so wie dein myFilter, die sich um die Aufgabe kümmern. Also das, was Matthias gemacht hat.
Hat er das?
LLAP 🖖
Hallo alle,
ich habe mehrfach folgende Konstruktion
$foo_f = $foo > 0 ? number_format($foo,0,',','.') : "";
Ziel ist es, ein (formatiertes) Ergebnis nur anzuzeigen, wenn es größer als Null ist.
Gibt es für den Teil
$foo_f = $foo > 0 ? $foo : "";
eine geschicktere Möglichkeit?
Die Frage ist, was Du stattdessen haben willst. Ob ein Leerstring geschickt oder ungeschickt ist, kannst nur Du wissen. MFG
Hallo Emil,
Ziel ist es, ein (formatiertes) Ergebnis nur anzuzeigen, wenn es größer als Null ist.
Die Frage ist, was Du stattdessen haben willst. Ob ein Leerstring geschickt oder ungeschickt ist, kannst nur Du wissen. MFG
Die Frage war nach einer geschickteren Möglichkeit, das Ziel zu erreichen.
Bis demnächst
Matthias
Die Frage war nach einer geschickteren Möglichkeit, das Ziel zu erreichen.
Du verwendest den bedingten(ternär) Operator in einer Zuweisung. Und das ist genau das was Deinem Zweck entspricht.
MFG
Hallo alle,
danke für alle Hinweise. Ich habe es in eine Funktion ausgelagert.
Bis demnächst
Matthias