[PHP] Ternary operator

Pagina: 1
Acties:

Onderwerpen


  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 23-11 18:22
Voor een Drupal module heb ik wat code geschreven. Werkt verder prima, alleen snap ik de werking van de 'ternary' operator niet helemaal.

Voor de functie return ik een value, die kijkt of veld X bestaat en die waarde dan terug geeft. Alleen geeft PHP mij een foutmelding die ik niet helemaal snap, aangezien ik dacht dat deze operator niet verder kijkt dan z'n neus lang is, nadat 't een expression heeft gevonden die 'true' returned. Blijkbaar gebeurd dat niet.

De foutmelding is deze:
Notice: Undefined property: stdClass::$content in get_deposit_from_node()

Deze code wilde ik in eerste instantie gebruiken. Detail is hier dan $node->product_deposit bestaat en ook een waarde heeft, maar blijkbaar wil PHP in de 'ternary' operator toch kijken of andere waardes ook geldig zijn. Blijkbaar zit er ook een fout in m'n gedachte dat ik 'isset' kan gebruiken op een veld in een array, maar daar kan ik later nog naar kijken.

code:
1
2
 return isset($node->product_deposit) ? $node->product_deposit : ($node->content != null && isset($node->content['product_deposit'])) ? $node->content['product_deposit'] : UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT;
}



Deze code werkt wel.Ik dacht alleen dat mijn ternary operator (bovenstaand) hetzelfde deed, maar blijkbaar niet helemaal.

code:
1
2
3
4
5
6
7
8
9
10
11
    // Does $node->product_deposit exist?
    $deposit_amount = isset($node->product_deposit) ? $node->product_deposit : NULL;
    
    // Check if 'node->[content]' exists.
    if ($deposit_amount == NULL &&  isset($node->content))
        $deposit_amount = isset($node->content['product_deposit']) ? $node->content['product_deposit'] : NULL;

    if ($deposit_amount == NULL)
        return UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT ;
    else
        return $deposit_amount;


Doel van topic: kan iemand m'n uitleggen waarom het niet werkt zoals ik verwacht? De logica die ik had verwacht is
code:
1
isset($node->product_deposit) ? $node->product_deposit : 'aangezien isset($node->product_deposit) true oplevert boeit het niet meer wat er verder gebeurt.)


note: heb niet echt een PHP achtergrond.

edit: http://us2.php.net/manual...rators.comparison.ternary blijkbaar werkt PHP op deze manier.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Example #3 Non-obvious Ternary Behaviour
<?php
// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
echo ((true ? 'true' : false) ? 't' : 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>


/opgelost.

[ Voor 14% gewijzigd door mrFoce op 28-07-2012 13:42 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat komt dus omdat die prutsers bij PHP 'm links-associative hebben gemaakt ipv right-associative.

[ Voor 8% gewijzigd door .oisyn op 28-07-2012 18:01 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ik ben (persoonlijk!) sowieso van mening dat het de leesbaarheid niet ten goede komt als je twee conditional operators in één regel propt. Ik schrijf dergelijke constructies meestal volledig uit.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ID-College
  • Registratie: November 2003
  • Laatst online: 17:38
Idd.. Ik vind de ternary operator ook niet echt zichbaar voor de code.
Ik gebruik altijd if/else of switch zodat het overzichtelijk blijft. De ternary gebruik ik alleen bij dingen als
PHP:
1
return isset($a) ? $a : $b;

Dan zijn de condities klein en kan het ook niet echt fout gaan.. Bij grotere condities ga je al gauw vraagtekens krijgen bij bovenstaande constructies. Zijn moeilijk te doorgronden.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:59
Hoe moeilijk zo'n complexe expressie te doorgronden is hangt ook af van hoeveel structuur er in zit, en of de code een beetje zinnig geformatteerd is. Je maakt mijn niet wijs dat dit moeilijker te doorgronden is dan de equivalente if/else structuur drie niveaus diep:
PHP:
1
2
3
4
$var = isset($a) ? $a :
       isset($b) ? $b :
       isset($c) ? $c :
                   $d ;


Maar dit werkt dus niet in PHP. Dan moet je haakjes gebruiken om de intuïtieve interpretatie te krijgen, maar dat is al een stuk minder mooi:

PHP:
1
2
3
4
$var = isset($a) ? $a :
     ( isset($b) ? $b :
     ( isset($c) ? $c :
     (             $d ) ) );


Ik vraag me af of er expressies zijn waarin een links-associatieve conditionele operator juist handiger/beter leesbaar is/meer intuïtief werkt. Als verstokte C programmeur kan ik er in ieder geval geen bedenken.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

.edit: nvm

[ Voor 85% gewijzigd door .oisyn op 28-07-2012 18:00 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 11:19
Soultaker schreef op zaterdag 28 juli 2012 @ 16:02:
Ik vraag me af of er expressies zijn waarin een links-associatieve conditionele operator juist handiger/beter leesbaar is/meer intuïtief werkt. Als verstokte C programmeur kan ik er in ieder geval geen bedenken.
Zelfde probleem hier ! :-P ( Maar dan zonder het verstokte C )

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 29-11 17:17
Xantios schreef op zondag 29 juli 2012 @ 17:08:
[...]


Zelfde probleem hier ! :-P ( Maar dan zonder het verstokte C )
En hier.

Maar ach, het is PHP. Dat op zich verklaart het toch al?

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 15:12
PHP heeft z'n quirks, maar die blog an sich bevat ook voldoende fouten...

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Dat blog (PHP, a fractal of bad design) is voor 50% gebaseerd op gedateerde feiten of gewoon ronduit foute aannames. Het feit dat hij alle frameworks van PHP over 1 kam scheert door Magento erbij te pakken geeft mij al weinig vertrouwen in de blogger.... dan heb je ook het meeste monsterlijke framework te pakken. Zo kan je er voor elke taal wel eentje vinden.
Blijft dat PHP immens populair is maar ook een van de oudste talen voor web die ook nog eens een verkapt hobbyproject is (Personal Homepage Tools).

Daarnaast is het ook makkelijk zeiken op PHP. Doet niet af aan het feit dat er ontzettend mooie webapps mee gemaakt zijn en nog steeds gemaakt worden.

Engineering is like Tetris. Succes disappears and errors accumulate.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

armageddon_2k1 schreef op zondag 29 juli 2012 @ 18:56:
Blijft dat PHP immens populair is maar ook een van de oudste talen voor web die ook nog eens een verkapt hobbyproject is (Personal Homepage Tools).
En dus? Hoe is dat in hemelsnaam een argument? "Je moet taal X gebruiken, want dat is een van de oudste talen en ook nog eens een verkapt hobbyproject" 8)7
Daarnaast is het ook makkelijk zeiken op PHP.
Natuurlijk is het makkelijk. 't Is niet alsof de makers hun best hebben gedaan om het moeilijk te maken :)
Doet niet af aan het feit dat er ontzettend mooie webapps mee gemaakt zijn en nog steeds gemaakt worden.
En dát doet niets af aan het feit dat het een taal is vol rare quirks en vage designbeslissingen (of eigenlijk het gebrek aan dergelijke beslissingen)

[ Voor 6% gewijzigd door .oisyn op 29-07-2012 19:00 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 29-11 17:17
Freeaqingme schreef op zondag 29 juli 2012 @ 18:08:
[...]


PHP heeft z'n quirks, maar die blog an sich bevat ook voldoende fouten...
Niet als je het weerwoord van de auteur v/h originele artikel er op na slaat. Lees je iets verder door dan zie je ook nog dat de auteur van jouw artikel het eigenlijk wel eens is met de auteur van het originele artikel, betreffende de kwaliteit van PHP als programmeertaal. (Oeps! :+ )
.oisyn schreef op zondag 29 juli 2012 @ 18:59:
En dát doet niets af aan het feit dat het een taal is vol rare quirks en vage designbeslissingen (of eigenlijk het gebrek aan dergelijke beslissingen)
En dat is precies het punt van het originele artikel. Dank je .oisyn, voor de perfecte verwoording. :)

[ Voor 15% gewijzigd door R4gnax op 29-07-2012 19:53 ]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
"Sure, PHP doesn't have a template system."

Na die opmerking kun je eigenlijk al stoppen met lezen.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 15:12
R4gnax schreef op zondag 29 juli 2012 @ 19:46:

[...]

En dat is precies het punt van het originele artikel. Dank je .oisyn, voor de perfecte verwoording. :)
Ik denk dat de meeste mensen het daar wel in min of meerdere mate over eens zijn. Maar waarom moet er dan nog steeds iedere keer op gebitched worden? Als de taal je niet bevalt dan gebruik je iets anders? Allicht is een taal als Java beter ontworpen, allicht zitten daar minder quirks in. Toch, als ik even snel een websiteje in elkaar wil zetten dan doe ik dat sneller in php dan in java. Wordt ik gevraagd aan een project te beginnen van >1M euro, dan ga je kijken welke taal (en framework) daar het beste bijpast. Dan is niet alleen de 'schoonheid' of quirks van een taal van belang. Veel belangrijker zijn de time to market, en de tco die er uit voortvloeien. Dan kan het nog steeds zo zijn dat php met bijvoorbeeld Zend Framework voor dat specifieke product met een specifiek team de beste keuze is (maar dat hoeft niet).

Als voor anderen een andere taal meer voordeel oplevert, why even bother with php? Ik ga ook geen blogs vol met rants over C schrijven, en melden dat het compleet ongeschikt is om snel een website in elkaar te draaien.

Ik vind het een nondiscussie om er inhoudelijk op in te gaan verder. Maar als je het doet, doe het dan in ieder geval op de laatste versie, en kom niet met argumenten aanzetten die enkel waar zijn voor versies die meer dan een jaar geleden gereleased zijn.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 29-11 17:17
Freeaqingme schreef op zondag 29 juli 2012 @ 20:12:
Ik denk dat de meeste mensen het daar wel in min of meerdere mate over eens zijn. Maar waarom moet er dan nog steeds iedere keer op gebitched worden? Als de taal je niet bevalt dan gebruik je iets anders?
Ik citeerde het 'fractal of bad design' artikel dan ook juist om aan te geven dat PHP nou eenmaal er om bekend staat dat het een hele bende ontwerpfouten in de taal heeft zitten, waarvan de ternary operator er maar ééntje is. Dus ...
Grijze Vos schreef op zondag 29 juli 2012 @ 19:58:
"Sure, PHP doesn't have a template system."

Na die opmerking kun je eigenlijk al stoppen met lezen.
Touché. Zelf nog niet eens opgevallen.

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
.oisyn schreef op zondag 29 juli 2012 @ 18:59:
[...]

En dus? Hoe is dat in hemelsnaam een argument? "Je moet taal X gebruiken, want dat is een van de oudste talen en ook nog eens een verkapt hobbyproject" 8)7
Dude, wind je eens een keer is niet zo op of probeer in ieder geval niet zo over te komen. Lees die zin nog eens goed. Ik beweer dat helemaal niet. Ik bedoel alleen dat het toevallig een van de oudste talen is en ook nog eens een hobbyproject, daardoor zit het waarschijnlijk vol met quirks. Let vooral eens op de plaatsing van het woord 'maar'.
Natuurlijk is het makkelijk. 't Is niet alsof de makers hun best hebben gedaan om het moeilijk te maken :)
Grappig.
En dát doet niets af aan het feit dat het een taal is vol rare quirks en vage designbeslissingen (of eigenlijk het gebrek aan dergelijke beslissingen)
Ja... klopt? En dat doet niets af aan het feit dat je er prima mooie apps mee kan maken zonder er de hele tijd op te zeiken.

Ik ben overigens de laatste die gaat ontkennen dat veel van die designbeslissingen van de pot gerukt zijn. Echter kwam ik ze (ik werk het laatste jaar eigenlijk niet meer met PHP) nooit tegen. Waar ik echter moe van wordt is het oeverloos dumpen van een link naar dat blog. Dat blog slaat soms kant noch wal. Zo kan je er ook eentje van Ruby maken of van het recentere Node.js.

[ Voor 19% gewijzigd door armageddon_2k1 op 29-07-2012 21:55 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

armageddon_2k1 schreef op zondag 29 juli 2012 @ 21:48:
Ja... klopt? En dat doet niets af aan het feit dat je er prima mooie apps mee kan maken zonder er de hele tijd op te zeiken.
Edoch bevinden we ons wederom in een topic van iemand die de rare quirks van PHP niet begrijpt.

Overigens is het ook flauw om de blog af te doen omdat er zogenaamd 50% niet klopt. Die andere 50% klopt wél, en dat is alsnog een hele shitload. Inclusief dingen die ze nooit gaan fixen (zoals ?: )

[ Voor 5% gewijzigd door .oisyn op 29-07-2012 22:22 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Niemand zegt dat je geen mooie dingen met PHP kan maken. Je kan ook hele mooie dingen maken in Brainfuck, maar dat wil niet zeggen dat het een fijne taal is zonder problemen...

Er is héél veel mis met PHP. Ik werk er elke dag mee op mijn werk, en ik vind wekelijks wel een nieuwe WTF of een nieuwe implicatie van een oude WTF. Toch kan ik er prima mijn werk in doen. Dat feit is echter geen reden om ineens niet aan te mogen geven dat er ronduit achterlijke designkeuzes zijn gemaakt in PHP. Armageddon_2k1: je zegt dat het een van de oudste webtalen is en daarnaast ook een hobbyproject in origine. Leuk en aardig, maar dat is óók geen excuus om de taal niet eens een keer op te schonen. Nou worden er in PHP6 goede stappen gezet, maar eigenlijk gaat het niet ver genoeg. Backwards compatibility heeft alleen zin als de vorige versies goed in elkaar zaten...
.oisyn schreef op zondag 29 juli 2012 @ 22:21:
[...]

Overigens is het ook flauw om de blog af te doen omdat er zogenaamd 50% niet klopt. Die andere 50% klopt wél, en dat is alsnog een hele shitload. Inclusief dingen die ze nooit gaan fixen (zoals ?: )
Sowieso klopt die blogpost wél. Er zitten een paar dingen in die persoonlijk zijn en als feit gebracht worden, en er zitten een paar dingen in die enigszins discutabel zijn, maar veruit de meeste punten zijn spot on.

[ Voor 22% gewijzigd door NMe op 29-07-2012 23:23 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 11:19
En daar gaan we weer, lekker zeiken op PHP...
Je kan bij hoog en laag gaan beweren dat er rariteiten in zitten, maar 9 van de 10x is dit puur vanuit Legacy, en ze verleugenen hun roots niet.

Goed, het is ooit ( in de gulden tijd!! ) begonnen als een hobby project, maar Apple is ook begonnen in een schuur, en de 1e ferarri was ook niet te vergelijken met de auto's die ze nu bouwen ( Tweakers zijn blijkbaar gek op auto vergelijkingen ? ) dus dat argument mag voor mij direct de schroot op.

Ja, er zullen zeker rariteiten in de taal zitten, maar het is nog lang geen Perl of C ( Als je het hebt over rare bagger zeg ! ) het is makkelijk om op PHP te gaan zitten zeuren, maar kom zelf maar met een betere en krachtigere interperter aan, en dan praten we verder...

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 15:12
NMe schreef op zondag 29 juli 2012 @ 23:21:
Er is héél veel mis met PHP. Ik werk er elke dag mee op mijn werk, en ik vind wekelijks wel een nieuwe WTF of een nieuwe implicatie van een oude WTF. Toch kan ik er prima mijn werk in doen. Dat feit is echter geen reden om ineens niet aan te mogen geven dat er ronduit achterlijke designkeuzes zijn gemaakt in PHP.
Dat ben ik volledig met je eens. Echter, in bijna iedere thread die over php gaat op GoT wordt het topic afgesloten met een rant over hoe slecht php wel niet is. Of het dat wel of niet is, heeft weinig met het topic zelf van doen. Toegegeven, uiteindelijk is alles te herleiden tot designkeuzes in de taal waarin je werkt, maar moeten die allemaal bij ieder topic betrokken worden dat over een bepaalde taal gaat?

offtopic:
Was er niet al een groot php rant topic, waar precies dat allemaal in kan? ;)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 23-11 18:22
offtopic:
Het is een PHP discussie topic geworden, dat was niet mijn doel van dit topic. Denk dat het beter is als dit topic wordt gesloten en de inhoudelijke posts over PHP worden verplaatst naar een ander topic?

  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 11:19
mrFoce schreef op maandag 30 juli 2012 @ 00:30:
offtopic:
Het is een PHP discussie topic geworden, dat was niet mijn doel van dit topic. Denk dat het beter is als dit topic wordt gesloten en de inhoudelijke posts over PHP worden verplaatst naar een ander topic?
Beter plan, trap die zeurders de hoek in.... Elke thread gebruiken om op PHP te zeuren, HEEL frustrerend omdat het ook nog eens redelijk slechte ( tot volkomen bagger) argumenten zijn. en natuurlijk herhalen herhalen herhalen... komt me stevig me strot uit

[ Voor 24% gewijzigd door Xantios op 30-07-2012 00:35 . Reden: Mwah, iets genuanceerder ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 02-12 18:25

Creepy

Tactical Espionage Splatterer

Dat een discussie een andere kant op gaat hoeft niet erg te zijn. Daar sluiten we niet zomaar topics voor ;) Ik sluit wel topics als er teveel offtopic posts komen zoals de laatste twee. Reageer normaal en ontopic, of blijf weg. Zonde om een topic te moeten sluiten daar voor....... Zeker de laatste reply van Xantios is totaal overbodig, Dus kap aub nmet dat soort posts.

[ Voor 13% gewijzigd door Creepy op 30-07-2012 01:12 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Xantios schreef op maandag 30 juli 2012 @ 00:22:
Je kan bij hoog en laag gaan beweren dat er rariteiten in zitten, maar 9 van de 10x is dit puur vanuit Legacy [...]
Zoals anderen al gezegd hebben: de oorzaak is irrelevant om (terechte) kritiek te hebben op PHP ;)
Ja, er zullen zeker rariteiten in de taal zitten, maar het is nog lang geen Perl of C ( Als je het hebt over rare bagger zeg ! )
Wacht, je wil nu zeggen dat er meer rariteiten in C zouden zitten dan in PHP? Ik ben werkelijk benieuwd op welke rariteiten je dan doelt :)
het is makkelijk om op PHP te gaan zitten zeuren, maar kom zelf maar met een betere en krachtigere interperter aan, en dan praten we verder...
Ok: Python. Ruby. Perl.
Freeaqingme schreef op maandag 30 juli 2012 @ 00:22:
Dat ben ik volledig met je eens. Echter, in bijna iedere thread die over php gaat op GoT wordt het topic afgesloten met een rant over hoe slecht php wel niet is. Of het dat wel of niet is, heeft weinig met het topic zelf van doen. Toegegeven, uiteindelijk is alles te herleiden tot designkeuzes in de taal waarin je werkt, maar moeten die allemaal bij ieder topic betrokken worden dat over een bepaalde taal gaat?
Blijkbaar wel. En weet je wat? Als mensen daardoor gaan nadenken over hun keuze PHP te gebruiken en migreren naar een betere taal, dan is dat wat mij betreft een positief iets.

Maargoed. Laat ik ook een poging doen nuttig en ontopic bij te dragen.
mrFoce schreef op zaterdag 28 juli 2012 @ 13:20:
code:
1
2
 return isset($node->product_deposit) ? $node->product_deposit : ($node->content != null && isset($node->content['product_deposit'])) ? $node->content['product_deposit'] : UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT;
}
Ik zou nooit conditional operators nesten, dat leidt vrijwel altijd tot onleesbaarheid. Ik zou sowieso aanraden de conditional operator te beperken tot korte expressies (zoals (a > 5) ? "groter" : "kleiner").

In jouw geval vind ik het gebruik van de conditional operator erg onleesbaar, dus is het beter de code uit te schrijven met if-statements, zo bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
if( isset( $node->product_deposit ) )
    return $node->product_deposit;

if( $node->content != null && isset( $node->content['product_deposit'] ) )
    return $node->content['product_deposit'];

return UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT;

Je ziet zo veel duidelijker de intentie van de code, wat bugs makkelijker te spotten maakt.

En waarom zou je het niet uitschrijven? Het is niet alsof de conditional operator sneller is (althans, niet inherent). Het enige voordeel is dat het iets korter is, maar wat schiet je daar mee op als dat zo ten koste gaat van de leesbaarheid?

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 23-11 18:22
deadinspace schreef op maandag 30 juli 2012 @ 01:32:

[...]

Ik zou nooit conditional operators nesten, dat leidt vrijwel altijd tot onleesbaarheid. Ik zou sowieso aanraden de conditional operator te beperken tot korte expressies (zoals (a > 5) ? "groter" : "kleiner").

In jouw geval vind ik het gebruik van de conditional operator erg onleesbaar, dus is het beter de code uit te schrijven met if-statements, zo bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
if( isset( $node->product_deposit ) )
    return $node->product_deposit;

if( $node->content != null && isset( $node->content['product_deposit'] ) )
    return $node->content['product_deposit'];

return UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT;

Je ziet zo veel duidelijker de intentie van de code, wat bugs makkelijker te spotten maakt.

En waarom zou je het niet uitschrijven? Het is niet alsof de conditional operator sneller is (althans, niet inherent). Het enige voordeel is dat het iets korter is, maar wat schiet je daar mee op als dat zo ten koste gaat van de leesbaarheid?
Bedankt voor je reply en ik geef je hierin gelijk. De originele syntax bedroeg maar 2 waarden. Maar om mijn module compatible te maken met een andere 3rd party module, had ik een snelle fix geplaatst en die werkte niet zoals ik had verwacht, vandaar dit topic.

Originele code was:
code:
1
(isset($node->product_deposit)) ? $node->product_deposit : UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT;

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

deadinspace schreef op maandag 30 juli 2012 @ 01:32:
[...]

Blijkbaar wel. En weet je wat? Als mensen daardoor gaan nadenken over hun keuze PHP te gebruiken en migreren naar een betere taal, dan is dat wat mij betreft een positief iets.
Dat is ook weer het andere uiterste. Er zijn plenty valide redenen te verzinnen om te kiezen voor PHP, ondanks de quirks. Als doel hebben om elke PHP-zondigaar over te laten stappen naar iets anders is net zo onconstructief als alle quirks bagetelliseren met "ja maar het is legacy". PHP 6 gaat al heel veel verbeteren, maar niet genoeg. Neemt niet weg dat de taal bruikbaar is zolang je de limitaties kent. Net zoals bij elke andere taal dus eigenlijk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:01

Ventieldopje

I'm not your pal, mate!

NMe schreef op maandag 30 juli 2012 @ 02:49:
[...]

Dat is ook weer het andere uiterste. Er zijn plenty valide redenen te verzinnen om te kiezen voor PHP, ondanks de quirks. Als doel hebben om elke PHP-zondigaar over te laten stappen naar iets anders is net zo onconstructief als alle quirks bagetelliseren met "ja maar het is legacy". PHP 6 gaat al heel veel verbeteren, maar niet genoeg. Neemt niet weg dat de taal bruikbaar is zolang je de limitaties kent. Net zoals bij elke andere taal dus eigenlijk. ;)
Precies, elke taal heeft zo wel zijn quirks. PHP is over het algemeen gewoon makkelijk te leren mede door populariteit en hoeveelheid informatie die beschikbaar is ... een zeer valide reden lijkt mij toch ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 11:19
NMe schreef op maandag 30 juli 2012 @ 02:49:
[...]

Dat is ook weer het andere uiterste. Er zijn plenty valide redenen te verzinnen om te kiezen voor PHP, ondanks de quirks. Als doel hebben om elke PHP-zondigaar over te laten stappen naar iets anders is net zo onconstructief als alle quirks bagetelliseren met "ja maar het is legacy". PHP 6 gaat al heel veel verbeteren, maar niet genoeg. Neemt niet weg dat de taal bruikbaar is zolang je de limitaties kent. Net zoals bij elke andere taal dus eigenlijk. ;)
Oh, mijn punt was ook absoluut niet dat het allemaal legacy redenen zijn.
het zijn er een aantal, verder heeft het gewoon zijn eigenaardigheden, maar zoals je zelf ook al aangeeft, dat heeft elke taal.

Zolang je met PHP om kan gaan is het gewoon heel leuk en bijzonder bruikbaar voor een aantal dingen,
daarbij is het een van de bekenste / grootste zover ik weet? dus de drempel om het te leren is ook niet bijzonder hoog.

al met al kun je niet echt concluderen dat het een slechte taal is, je kan hoogstens kiezen om de quirks voorlief te nemen of elk topic op tweakers er over vol stampen :-P

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 13:00
Xantios schreef op maandag 30 juli 2012 @ 03:03:
[...] al met al kun je niet echt concluderen dat het een slechte taal is, je kan hoogstens kiezen om de quirks voorlief te nemen of elk topic op tweakers er over vol stampen :-P
ff los van of php wel of niet slecht is. Natuurlijk kan je wel concluderen dat een taal slecht (ontworpen) is, ondanks dat die taal misschien wel de populairste alle tijden is (dat is php denk ik niet btw).
Als we het over populariteit gaan hebben: http://spectrum.ieee.org/image/1928472 (plaatje gebaseerd op data van http://langpop.com/ van oktober 2011)
En nu allemaal weer ontopic ^^

[ Voor 15% gewijzigd door Caelorum op 30-07-2012 09:31 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Aangezien de topicstarter geholpen is kan het wat mij betreft geen kwaad om offtopic door te gaan en alle wederzijdse frustraties een keer centraal te bespreken. :P

PHP's grootste probleem is dat ze niks willen breken. In plaats daarvan laten ze het framework en de taal met zijn huidige quirks lekker voortkabbelen. Wat we nodig hebben is een versie van PHP die eindelijk eens breekt met wat gekke dingen. Zolang Zend dat niet aandurft zal PHP altijd dat hobbyprojectje blijven.

Er zijn overigens voldoende andere talen om het mee te leren die even makkelijk zijn. PHP is de meest bekende en daarmee de makkelijkste keus. Het probleem dat ik daarmee heb is het feit dat vrijwel alleen beginnende programmeurs met PHP beginnen en die leren dus allemaal dingen aan die in beter opgezette talen een slecht plan zijn.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Xantios schreef op maandag 30 juli 2012 @ 00:31:
[...]


Beter plan, trap die zeurders de hoek in.... Elke thread gebruiken om op PHP te zeuren, HEEL frustrerend omdat het ook nog eens redelijk slechte ( tot volkomen bagger) argumenten zijn. en natuurlijk herhalen herhalen herhalen... komt me stevig me strot uit
Niet om 't een of ander, maar we zijn op dit punt gekomen omdat iemand zo nodig weer in moest gaan op het geplaatste linkje.

Maar ik ben wel benieuwd naar je argumenten wat er zo raar is aan C.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 11:19
.oisyn schreef op maandag 30 juli 2012 @ 12:27:
[...]

Niet om 't een of ander, maar we zijn op dit punt gekomen omdat iemand zo nodig weer in moest gaan op het geplaatste linkje.

Maar ik ben wel benieuwd naar je argumenten wat er zo raar is aan C.
Heb je die syntax ooit kritisch bekeken? zitten meer vreemde tekens in als het menu van de chinees op de hoek...

De syntax van het spul is verschrikkelijk, en in C++ ( Ja dat is voor mij gemakshalve even het zelfde) zit je 90% van je tijd met typecastig te rotzooien.

Goed, PHP heeft dan een-soort-van verschillende smaken, en C is een verzuurd oud vrouwtje hierin, dat is mogelijk ook wel het ene uiterste tegen het andere, maar volgens mij moet er wel een guldenmiddenweg te vinden zijn.

[ Voor 30% gewijzigd door Xantios op 30-07-2012 13:14 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

De syntax van C is vrijwel gelijk aan die van zowel PHP als Java. 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 11:19
NMe schreef op maandag 30 juli 2012 @ 13:18:
De syntax van C is vrijwel gelijk aan die van zowel PHP als Java. 8)7
Hoe lijkt
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
       A simple example of a function prototype allowing the function
       to be used before it is defined.
    */
    
    #include <stdio.h>
    
    int sum (int, int);
    
    int
    main (void)
    {
        int total;
    
        total = sum (2, 3);
        printf ("Total is %d\n", total);
    
        return 0;
    }
    
    int
    sum (int a, int b)
    {
        return a + b;
    }


op iets als:
PHP:
1
2
3
4
5
6
7
8
9
10
11
function main()
{
  // Do some math
  $iMath  = Math(1,5);
  print $iMath;
}

func Math($iA,$iB)
{
   return $iA+$iB;
}


want volgens mij zit hier wel het nodige verschil in hoor.
Java kan ik overigens niet goed over oordelen, te weinig van gezien ( moet ik toch eens naar gaan kijken, lijkt me wel leuk :+ )

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Je realiseert je dat er praktisch geen verschil zit in de syntax van die twee stukjes code afgezien van het aan moeten geven van types? Print vs. printf is daarbij geen syntaxverschil. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

A quote comes to mind...
Xantios schreef op maandag 30 juli 2012 @ 00:31:
HEEL frustrerend omdat het ook nog eens redelijk slechte ( tot volkomen bagger) argumenten zijn.
Vrijwel álle symbolen van C zitten in PHP. En ja, C is strong typed, net als heel veel andere talen. En last time I checked was type hinting in PHP een welkome feature.
Xantios schreef op maandag 30 juli 2012 @ 13:12:
en in C++ ( Ja dat is voor mij gemakshalve even het zelfde) zit je 90% van je tijd met typecastig te rotzooien.
Niet meer dan in menig ander strong typed taal. Waar je overigens bij lange na niet aan die 90% komt, of je doet iets heel erg verkeerd. Bovendien heb ik het idee dat je vete nu meer gaat over dat paradigma zelf dan over specifieke talen.

Kunnen we ook over discussieren hoor, maar dan kan ik me niet van de indruk onttrekken dat je eigenlijk niet heel erg snapt waar we het bij PHP over hebben.

[ Voor 44% gewijzigd door .oisyn op 30-07-2012 13:53 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 29-11 17:17
Xantios schreef op maandag 30 juli 2012 @ 13:12:
De syntax van het spul is verschrikkelijk, en in C++ ( Ja dat is voor mij gemakshalve even het zelfde) zit je 90% van je tijd met typecastig te rotzooien.
En daar ben ik opgehouden met lezen.

Als je 90% van je tijd verdoet met typecasting in C++ dan ben je echt hele vreemde dingen aan het bouwen òf heb je totaal geen kaas gevreten van goed programma ontwerp. Met een goede architectuur insteek is het bijna altijd mogelijk om down-casting te vermijden en up-casting zou sowieso geen issue moeten zijn.

Of was dit misschien een poging om uit te halen naar het principe van pointer (de)referencing en ken je de terminologie gewoon niet goed? Pointers en references zijn inderdaad nog wel eens problematisch voor sommige mensen, wat eigenlijk vreemd is aangezien ze perfect de gestelde regels volgen. Grootste probleem vindt zijn oorsprong bij idioten die wanneer ze er niet meer uit komen gewoon maar nog meer &foo en *bar tegen de muur aan smijten en kijken wat er blijft plakken en zo groteske gedrochten weten te produceren.

  • Waster
  • Registratie: September 2006
  • Laatst online: 14-04 17:49
Wat ik jammer vind is dat in dit topic niet werd genoemd dat het enige voordeel van de ternary if tov de if/else is dat de ternary if naar een expressie evalueert. Dit kan een voordeel zijn als je een boolean hebt die invloed heeft op je expressie en je geen zin hebt om een hele if/else structuur te schrijven.

PHP:
1
2
3
$flag = true;

$sum = 10 * ($flag ? 2 : 3 );


Met een if/else heb je ook nog een extra variabele nodig en ben je zo vier regels extra kwijt.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Waarom zouden we dat ter discussie brengen als dat zowel voor ons als voor de topicstarter allang duidelijk is? Neemt niet weg dat het niet lekker werkt als je het gaat nesten. En "extra regels kwijt zijn" is wel een heel slecht excuus natuurlijk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

PHP:
1
2
3
$flag = true; 

$sum = 10 * (3 - $flag);

:+

[ Voor 7% gewijzigd door .oisyn op 30-07-2012 14:46 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Ik denk dat de meesten het er over eens zijn dat PHP een taal is met zeer eigenaardige quirks.

Toch niet helemaal los van de taal zijn de projecten die PHP heeft voort gebracht en de collaboration die hier mee tot stand is gekomen, met als voorbeeld van de TS; Drupal.
Ik ben van mening dat PHP zo hard aan zijn legacy vast houdt omdat er zoveel pakketten voor de taal hebben gekozen vanwezige dit. Je ziet dit helaas ook in producten die hier uitrollen, bijv Wordpress.

Imho interessant tegenwoord dat PHP "slecht is": http://fabien.potencier.o...etter-than-what-you-think

offtopic:
Rare quirks van Ruby en voornamelijk Javascipt in een leuke vormgegoten: https://www.destroyallsoftware.com/talks/wat

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Met een paar voorbeeldjes van dingen die (uiteindelijk) wel goed zijn aantonen dat de taal in zijn geheel wel goed is, is ook nogal een fallacy natuurlijk. En dat hij het "the best web platform" noemt kan ik ook niet serieus nemen. :)

Verder is het loslaten van legacy niet meer dan een kwestie van spul deprecaten in versie X en vervolgens pas breken in versie X+1. Eventueel een setting toevoegen in je config waarmee je legacy code blijft supporten en die setting in versie X+2 weer weghalen. Met de update cycle van PHP heb je dan nog we 10 jaar om je code aan te passen. 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

NMe schreef op maandag 30 juli 2012 @ 15:39:
Met een paar voorbeeldjes van dingen die (uiteindelijk) wel goed zijn aantonen dat de taal in zijn geheel wel goed is, is ook nogal een fallacy natuurlijk. En dat hij het "the best web platform" noemt kan ik ook niet serieus nemen. :)
Maar natuurlijk :)
NMe schreef op maandag 30 juli 2012 @ 15:39:
Verder is het loslaten van legacy niet meer dan een kwestie van spul deprecaten in versie X en vervolgens pas breken in versie X+1. Eventueel een setting toevoegen in je config waarmee je legacy code blijft supporten en die setting in versie X+2 weer weghalen. Met de update cycle van PHP heb je dan nog we 10 jaar om je code aan te passen. 8)7
Helaas maar waar |:( 8)7

Wellicht een beetje ot, maar zelf ben ik wel blij dat er eindelijke schot komt in de vorm van goed uitgewerkte (open source) frameworks en een fatsoenlijke dependency manager aka Composer.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ik ben vooral blij met de goede stappen die PHP6 gaat nemen. Helaas is er daarna nog een lange weg te gaan, maar ze gaan in elk geval de eerste stap zetten. Als PHP6 tenminste nog daadwerkelijk uit gaat komen voordat ik met pensioen ga. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

NMe schreef op maandag 30 juli 2012 @ 16:22:
Ik ben vooral blij met de goede stappen die PHP6 gaat nemen. Helaas is er daarna nog een lange weg te gaan, maar ze gaan in elk geval de eerste stap zetten. Als PHP6 tenminste nog daadwerkelijk uit gaat komen voordat ik met pensioen ga. :+
Hehe zo denk ik er ook over :9

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 16:38

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 24-11 23:24

BikkelZ

CMD+Z

Ternaries gebruik ik nooit voor meer dan één vergelijking, geneste ternaries zijn gewoon niet leesbaar.

iOS developer


  • Kajel
  • Registratie: Oktober 2004
  • Laatst online: 09-11 18:41

Kajel

Development in Style

Ik nam Fabien Potencier altijd erg serieus, omdat hij, voor zover dat mogelijk is met PHP, met zijn Symfony framework heeft geprobeerd een solide en Enterprise-waardig framework om een kapotte taal heen te bouwen. De evolutie van Symfony1 naar Symfony2, waarbij Fabien overigens niet teruggeschrokken is voor het breken van backwards compatibility, was ook weer een heel welkome toevoeging aan het PHP ecosysteem.
Ik nam hem dus serieus, totdat ik bovenstaand artikel las toen hij het op Twitter gooide, en zijn discussies met andere Twitteraars naar aanleiding van dat artikel. Hij steekt zijn kop enorm in het zand en heeft niet de kennis of is niet mans genoeg, om de toe te geven dat er een hoop mis is met PHP. Erg jammer :(

Iets anders wat ik me afvraag: ook in dit topic kwam van een PHP voorstander weer het argument naar voren dat er heel veel mooie webapps mee gebouwd zijn. Doorgaans gaat het argument wanneer ik dat argument tegenkom, gaat het nog verder door Facebook erbij te trekken (waarvan in het hele backend geen spoortje PHP te bekennen is), wat gelukkig deze keer niet gebeurde. Ik kom dat soort webapps echter nooit tegen. Bijna alle webapps waar uberhaupt nog PHP bij betrokken is, gebruiken het i.c.m. een backend in Java/C++/Scala/whatnot. Tweakers.net is misschien ook ooit in PHP begonnen (gok ik), maar heeft volgens mij nu ook een Java backend.
Mijn vraag dus, om eens even harde eisen aan het argument te stellen: welke webapps zijn er dan die volledig met PHP gebouwd zijn en onderdeel zijn van een beursgenoteerd bedrijf, of bedrijf van gelijke grootte (is nog wat vaag, maar wat mij betreft goed genoeg begrensd).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

De backend van tweakers is niet geheel Java, dat zijn maar specifieke onderdelen. En dit forum is ook volledig PHP. Maar zoals je zelf al zegt, het is een non-argument, dus ik vraag me af waarom het überhaupt van belang is.

[ Voor 46% gewijzigd door .oisyn op 03-08-2012 10:48 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ook PHP valt prima te schalen hoor. Het zou me niks verbazen als er nog meer grote sites volledig of grotendeels op PHP gebaseerd zijn dan je denkt. Om te beginnen deze site inderdaad, maar er zijn er vast wel meer.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Kajel schreef op vrijdag 03 augustus 2012 @ 10:00:
Mijn vraag dus, om eens even harde eisen aan het argument te stellen: welke webapps zijn er dan die volledig met PHP gebouwd zijn en onderdeel zijn van een beursgenoteerd bedrijf, of bedrijf van gelijke grootte (is nog wat vaag, maar wat mij betreft goed genoeg begrensd).
Wat wil je eigenlijk bereiken met deze vraag? Wij werken genoeg voor beursgenoteerde bedrijven en guess what...het merendeel is PHP. Wat verandert dat aan het bedrijf of gebruiker als het in een andere taal dan PHP wordt geschreven?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02-12 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Cartman! schreef op vrijdag 03 augustus 2012 @ 12:43:
Wat verandert dat aan het bedrijf of gebruiker als het in een andere taal dan PHP wordt geschreven?
Dat ze meer winst gaan maken omdat de developers productiever zijn? :+ /flauw

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1