Matthias Apsel: bessere Vorgehensweise möglich?

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

--
Pantoffeltierchen haben keine Hobbys.
¯\_(ツ)_/¯

akzeptierte Antworten

  1. @@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 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  2. 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, ',', '.') : '';
    }
    
  3. 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

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. 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

      --
      Lieber einmal mit Schneewittchen, als siebenmal mit den Zwergen.
      1. 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

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. 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

          --
          Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
    2. @@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 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. 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

        --
        sumpsi - posui - clusi
        1. @@Rolf B

          Wenn eine Templatesprache verwendet wird,

          PHP ist eine Template-Sprache

          Ja.

          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 🖖

          --
          „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
          „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

          —Marc-Uwe Kling
  4. 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

    1. 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

      --
      Pantoffeltierchen haben keine Hobbys.
      ¯\_(ツ)_/¯
      1. 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

  5. Hallo alle,

    danke für alle Hinweise. Ich habe es in eine Funktion ausgelagert.

    Bis demnächst
    Matthias

    --
    Pantoffeltierchen haben keine Hobbys.
    ¯\_(ツ)_/¯