falke: alternativsyntax zu else

Gute Nacht,

mir wurde vor kurzem diese alternativsyntax vorgeschlagen aber das klappt so nicht und die php.net Beschreibung ist auch eine andere.

<?php
$display = (isset($_GET['start2'])) ? "display:block;" : "display:none";
?>

Wäre sehr schön wenn die obere das gleiche ergeben würde wie die untere.

Das ist eine alternative Syntax für Kontroll Strukturen - manchmal recht praktisch, da es einfach kürzer ist, du könntest aber auch genauso gut in der Langform schreiben:

<?php
if(isset($_GET['start2']))
{
  $display = "display:block;";
}
else
{
  $display = "display:none;";
}
?>

wenn das geht was mache ich denn falsch ?

mfg falke

  1. Hallo,

    was funktioniert denn nicht?

    gruss

    --
    no strict;
    no warnings;
    Der natürliche Feind der Festplatte ist der Teppich, der sich gerne mal elektrisch aufläd und der Festplatte eine wischt.
    Kluge Leute sind auch nur Menschen.
  2. Hi,

    $display = (isset($_GET['start2'])) ? "display:block;" : "display:none";

    hier ist im String nach none kein ;

    else
    {
      $display = "display:none;";

    hier ist im String nach none ein ;

    Wäre sehr schön wenn die obere das gleiche ergeben würde wie die untere.

    Wie soll das möglich sein, wenn Du unterschiedliche Strings verwendest?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. hi,

      ja jetzt klappt es.

      kann ich das auch mit anderen schleifen machen, in der php.net definition ist das anders.

      mfg falke

      1. Hi,

        kann ich das auch mit anderen schleifen machen,

        Bis jetzt hatten wir noch keine Schleifen, also kann es auch keine "anderen" geben.

        in der php.net definition ist das anders.

        Unter "php.net definition" kann ich mir beim bestem Willen nichts vorstellen. Würdest Du das ein klein wenig kräftiger elaborieren?

        Und außerdem: wenn es hier einer übertreibt mit Conditional Expressions dann bin ja wohl ich das, oder? Wer erinnert sich denn nicht gerne mit Grausen an die älteren Versionen von Mooner Salems "Libhtmlparse" bevor er auf Flex umschwenkte? Ja genau, dieser doppelt verschachtelte C.E. gegen Ende des Spaghetticodes:
        html = (*html == '-') ? ((commentCallBack) ? parseComment(html) : eatUp(html)) : ((declCallBack) ? parseDecl(html) : eatUp(html));

        Gegen sowas willst Du doch wohl nicht etwa anstinken?

        Aber Scherz beiseite (auch wenn die Fakten tatsächlich stimmen, so peinlich es heute auch sein mag):
        Die Benutzung von Conditional Expressions ist heute wirklich nicht mehr zeitgemäß. Der Compiler/Interpreter mag mit C.E.s besser optimieren können, aber das spielt bei den heutigen Rechenleistungen und vor allem den Speicherpreisen keine Rolle mehr. Es bleibt nur die unterschiedlcihe Lesbarkeit und die ist nur besser, wenn die Entscheidung wirklich offensichtlich und kurz ist, ansonsten ist es schlechter lesbar als ein ausgeschriebenes if/else Konstrukt. Vermeide also die Benutzung.

        Kannst auch Perl lernen, da gibt's sowas ähnliches sogar für Schleifen.

        so short

        Christoph Zurnieden

        1. Hallo Christoph,

          Es bleibt nur die unterschiedlcihe Lesbarkeit und die ist nur besser, wenn die Entscheidung wirklich offensichtlich und kurz ist, ansonsten ist es schlechter lesbar als ein ausgeschriebenes if/else Konstrukt. Vermeide also die Benutzung.

          "Vermeiden" halte ich für einen schlechten Rat. Denn wie du selbst zugibst, ist die Schreibweise mit dem ?: Operator bei einfachen und kurzen Ausdrücken sogar übersichtlicher und besser lesbar, und dem kann ich nur zustimmen. Ich würde nie ein mehrzeiliges if-else-Konstrukt basteln, nur um anhand eines einfachen Ausdrucks zu entscheiden, ob ich z.B. 1 oder 10 zuweisen möchte.

          Deshalb würde ich vorschlagen:
          Streiche den Satz "Vermeide also die Benutzung", ersetze ihn durch "Verwende es daher wohlüberlegt".

          So long,

          Martin

          1. Hi,

            Ich würde nie ein mehrzeiliges if-else-Konstrukt basteln, nur um anhand eines einfachen Ausdrucks zu entscheiden, ob ich z.B. 1 oder 10 zuweisen möchte.

            Mehr habe ich in meinem Beispiel auch nicht gemacht. Und? War es deshalb besser lesbar?

            Deshalb würde ich vorschlagen:
            Streiche den Satz "Vermeide also die Benutzung", ersetze ihn durch "Verwende es daher wohlüberlegt".

            Der Schaden bei prinzipieller Mißachtung des ternären Operators ist verschwindend gering; niedriger auf jeden Fall als eine einzige ungeschickte Benutzung.
            Wenn man sich dagegen das "goto" anschaut, das es in PHP so nicht gibt, kann der Schaden bei prinzipieller Mißachtung durchaus erheblich sein; da ist die eine oder andere ungeschickte Nutzung durchaus verzeihlich.
            Dein Änderungsvorschlag ist demnach für das "goto" geeignet aber nicht für den ternären Operator.

            so short

            Christoph Zurnieden

  3. Moin,

    Das ist eine alternative Syntax für Kontroll Strukturen - manchmal recht praktisch, da es einfach kürzer ist, du könntest aber auch genauso gut in der Langform schreiben

    Das ist Unfug. ?: ist ein Operator und geht dementsprechend nur mit Ausdrücken. if/else ist ein Sprachkonstrukt und geht nur mit Anweisungen. Dass man eine Anweisung die den trinären Operator in einem Ausdruck verwendet immer auch in zwei Anweisungen umschreiben kann und zwischen diesen mit if/else umschalten bedeutet längst nicht, dass ?: irgendwie eine Alternative oder gar Kurzform zu if/else ist.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~