[PHP] if in een echo

Pagina: 1
Acties:

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Topicstarter
Ik heb een vrij simpel probleempje, waarop in in de PHP manual niets over kan vinden. En zoeken naar 'PHP if echo' op GoT levert me zoveel results op, dat ze doorzoeken echt onbegonnen werk is. En in de PHP manual kan ik het ook niet vinden. :)

Maar goed, nu het probleem. Het zal jullie allemaal bekend zijn, dat je met puntjes een functieoutput in een variabele of echo kunt zetten, zo dus:
PHP:
1
2
3
<?
echo "Hiero staat een nummertje: ".mysql_insert_id().", mooi hè!";
?>

Dit levert uiteraard geen problemen op. Maar ik wil nu graag een if'je in de echo zetten, om het te gebruiken voor een achtergrondkleur, die afhankelijk is van databaseoutput. Hieronder even een simpele weergave van het probleem.
PHP:
1
2
3
<?
echo "Dit is ".if ($status == "ja") { echo "grijs"; } else { echo "blauw"; };.", mooi hè";
?>

En dit is dus niet goed volgens PHP, want ik krijg een mooie parse error. Gekke dingen als het weglaten van de één na laatste ; etc. helpen (uiteraard) ook niet. Dus, heeft iemand een idee?

En D2k wist het ook niet >:)

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

* D2k weet het wel :) denk ik
beter lezen :)

Doet iets met Cloud (MS/IBM)


  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Topicstarter
Dat dacht ik ook inderdaad, maar jouw script werkt niet.
PHP:
1
2
3
4
<?
$status = "ja";
echo "Dit is ".if ($status == "ja") { echo "grijs"; } else { echo "blauw"; }.", mooi hè";
?>

Parse error: parse error in test.php on line 3

:'(

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


Verwijderd

PHP:
1
2
3
<?
echo "Dit is " . (($status == "ja") ? "grijs" : "blauw") . ", mooi hè";
?>

Mooier IMHO :)

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Topicstarter
Op vrijdag 01 februari 2002 21:34 schreef Cheatah de oplossing.
Ok, thnx, die zocht ik :)
Geef de thread maar een Afbeeldingslocatie: http://213.239.154.15/forum/2.gif.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Cheatah: Mooier IMHO :)
Vind ik niet :) . Ik vind het fraai als je voor een if constructie als expressie ook een duidelijke syntax kan gebruiken en geen obscure ? : notatie. De if syntax is duidelijk en dus stem ik voor die :) .

Er is geen enkele reden waarom je niet de statements syntax ook als expressie zou kunnen gebruiken (itt tot wat de ontwikkelaars van Java en C# besloten hebben).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
"if ... { ... } else {...}" is een statement, terwijl een operator als "." een expressie verwacht. Daar kun je dus de conditionele operator "...?...:..." gebruiken, die wél een expressie oplevert, OF je kan natuurlijk die "." overboord gooien en afzonderlijke statements maken:
code:
1
2
3
4
<?
  $status = "ja";
  echo "Dit is ";if ($status == "ja") { echo "grijs"; } else { echo "blauw"; }; echo ", mooi hè";
?>

Verwijderd

Op vrijdag 01 februari 2002 21:39 schreef mbravenboer het volgende:

Vind ik niet :) . Ik vind het fraaie als je voor een if constructie als expressie ook een duidelijke syntax kan gebruiken en geen obscure ? : notatie. De if syntax is duidelijk en dus stem ik voor die :) .

Er is geen enkele reden waarom je niet de statements syntax ook als expressie zou kunnen gebruiken (itt tot wat de ontwikkelaars van Java en C# besloten hebben).
Het is natuurlijk allemaal een kwestie van smaak :)
Die shorthand notatie is ervoor gemaakt om in de juiste gevallen de code kort en bondig te houden. Ik gebruikt het dan zelf eigenlijk ook alleen als ik zeker weet dat het bij een enkele instructie gaat, die eigenlijk nooit veranderd hoeft te worden.

Maar goed, als je het in dit geval _niet_ gebruikt, is het onmogelijk om het netjes op een regel te krijgen. Bij interessantere stukken code gebruik ik wel altijd de duidelijke methode :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Cheatah: Het is natuurlijk allemaal een kwestie van smaak :)
Uiteraard :) .
Die shorthand notatie is ervoor gemaakt om in de juiste gevallen de code kort en bondig te houden.
Kort, bondig en vaag :P . Ik heb nooit begrepen waarom voor een conditionele expressie opeens een andere syntax uit de kast moet worden gehaald. Als deze syntax zo prettig is zou je hem ook wel voor statements kunnen gebruiken :P .
Maar goed, als je het in dit geval _niet_ gebruikt, is het onmogelijk om het netjes op een regel te krijgen.
Dan doet ook PHP het dus niet naar mijn smaak 8-) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Op vrijdag 01 februari 2002 21:47 schreef mbravenboer het volgende:
Kort, bondig en vaag :P . Ik heb nooit begrepen waarom voor een conditionele expressie opeens een andere syntax uit de kast moet worden gehaald. Als deze syntax zo prettig is zou je hem ook wel voor statements kunnen gebruiken :P .
Weet je wat pas vaag is? Een taalconstructie die zowel als statement als expressie kan optreden en zowel op expressies als statements werkt! Dat vraagt gewoon om problemen - dat zou jij toch zeker moeten begrijpen. Elke expressie is wel een statement maar niet elke statement is een expressie (in een imperatieve taal!). In een functionele programmeertaal, waarbij statement en expressie hetzelfde zijn, is er ook maar een enkele conditionele expressie (meestal bekend als guard, hoewel pattern matching ook een vorm van branching is natuurlijk).

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Soultaker: Weet je wat pas vaag is? Een taalconstructie die zowel als statement als expressie kan optreden en zowel op expressies als statements werkt!
Dat kan jij wel vinden, maar ik niet :) . Er zijn veel talen waar er veel minder onderscheid is tussen expressies en statements. Je hebt zelfs talen waar je complete blokken code als expressie kunt gebruiken, zolang het maar een waarde oplevert. Dit kan vrij plezierig werken overigens ;) .

Mijn punt is dat de conditionele expressie een onduidelijke syntax is en niet plezierig overkomt. Vaak wordt hij zelfs afgeraden door de makers van de taal |:( . Er is helemaal niets op tegen om de if syntax ook als expressie te gebruiken zolang de waarde in de then en the else ook maar een expressie zijn (en van hetzelfde type).
code:
1
int x = if(blaat) then boeh; else bah;

vind ik veel fraaier dan:
code:
1
int x = blaat ? boeh : bah
Dat vraagt gewoon om problemen - dat zou jij toch zeker moeten begrijpen.
Wat voor problemen dan? >:) .

Ik heb pas nog een compiler geschreven voor een taal waarbij de if constructie ook voor expressies gebruikt kan worden, dus je kan maar beter met goede argumenten komen ;) .
Elke expressie is wel een statement maar niet elke statement is een expressie (in een imperatieve taal!).
Idd. Een while loop en een for loop kunnen bijvoorbeeld niet echt als een expressie dienst doen.... Ook een if-then gaat niet opgeschieten .... een if then else met als then en else een expression is echter geen enkel probleem :) .

Je moet je niet teveel laten afleiden door de gemeenschappelijk syntax: dat is een parser probleem. De constructie in de compiler (abstract syntax tree) kan heel anders zijn :) .
In een functionele programmeertaal, waarbij statement en expressie hetzelfde zijn
Een statement is in een functionele taal zelfs vrij onzinnig :) . Een statement is alleen maar nuttig als die statement side-effects heeft en uiteraard bestaan er in een pure functioneel taal geen side-effects :+ .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op vrijdag 01 februari 2002 21:28 schreef intoxicated het volgende:
PHP:
1
2
3
<?
echo "Dit is ".if ($status == "ja") { echo "grijs"; } else { echo "blauw"; };.", mooi hè";
?>

Dus, heeft iemand een idee?
PHP:
1
2
3
4
5
6
7
<?
if($status == "ja")
    $color = "blauw";
else
    $color = "grijs";
echo "Dit is {$color} mooi hè";
?>

Imho vele malen duidelijker.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Ik zei (over het gebruik van if/then/else voor zowel statement als expressie):
"Dat vraagt gewoon om problemen." (Stomme quote-feature van dit forum wiste mijn tekst).
Op vrijdag 01 februari 2002 22:26 schreef mbravenboer het volgende:
Wat voor problemen dan? >:) .
Dat het niet meer duidelijk is wat de betekenis van de code is. In principe kun je heel veel verschillende constructies wel dezelfde naam geven, zoals bijvoorbeeld ook de while lus, met evaluatie voor en na de executie van de code in de lus.

De reden om dit niet te doen, is de overzicht van de code. Als ik 'if' zie staan, weet ik dat ik met een statement te maken heb. Als ik "?" zie staan, een expressie.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 02 februari 2002 00:44 schreef Soultaker het volgende:
De reden om dit niet te doen, is de overzicht van de code. Als ik 'if' zie staan, weet ik dat ik met een statement te maken heb. Als ik "?" zie staan, een expressie.
Dat neemt niet weg dat je code niet duidelijker wordt van al die constructies die hier boven (mijn post) genoemd zijn :)

Al die voorwaardelijke regels tekst zijn echt niet makkelijk te overzien als je niet uitkijkt.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Soultaker: De reden om dit niet te doen, is de overzicht van de code. Als ik 'if' zie staan, weet ik dat ik met een statement te maken heb. Als ik "?" zie staan, een expressie.
Overzichtelijkheid is ook een punt wat de programmeur zelf in de hand heeft. Uiteraard moet je niet als een gek conditionele expressies gaan nesten, net zoals je nu al niet een statements van twee beeldschermen breed moet gaan schrijven. Als je het echter selectief gebruikt kan het best handig zijn.

Ik noem een paar situaties:
code:
1
2
3
4
5
6
7
int result = 
    if( y > 5) {
        z + getSize();
    }
    else {
        y + getSize();
    }

Je zou dit nu anders zou moeten schrijven:
code:
1
2
3
4
5
6
7
int result;
if( y > 5) {
   result = z + getSize();
}
else {
   result = y + getSize();
}

De eerste variant vind ik dus wel prettig :) .

Hetzelfde zou ik willen hebben voor try-catch statements:
code:
1
2
3
4
5
6
7
int result = 
     try {
         getSomeValue();
     }
     catch(SomeException exc) {
         getSomeOtherValue();
     }

Super duidelijk vind ik :) .

Uiteraard begint de syntax onprettig te worden als je deze expressie vormen gaat nesten en gaat opnemen in methode parameters en dergelijke. Dus: geniet, maar met mate :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1