CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

PHP associativité gauche

Cj1993
Cj1993
Niveau 12
18 juillet 2016 à 22:06:43

Salut,
En lisant un article ( https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ ) désignant le PHP comme un langage bullshit (désolé pour ceux qui en font) je tombe sur cet exemple :
$arg = 'T'; $vehicle = ( ( $arg == 'B' ) ? 'bus' : ( $arg == 'A' ) ? 'airplane' : ( $arg == 'T' ) ? 'train' : ( $arg == 'C' ) ? 'car' : ( $arg == 'H' ) ? 'horse' : 'feet' ); echo $vehicle;

Et ça affiche bien horse.

Alors la j'ai rien compris, il parait que c'est à cause de l'associativité gauche de l'opérateur ?: .

Comment est évalué l'expression ? Quelqu'un peut m'expliquer ?

Message édité le 18 juillet 2016 à 22:07:41 par Cj1993
Triggered
Triggered
Niveau 9
19 juillet 2016 à 00:19:04

C'est débile comme exemple, qui irait écrire des ternaires chainées comme ça...

Bref, après l'associativité à gauche de la ternaire en PHP est une belle connerie c'est un fait, tu devrais pas trouver ça normal que ça affiche "horse", vu que $arg vaut T intuitivement l'expression devrait retourner train.

Le truc c'est que PHP "parenthèse" l'expression comme ça :

(
	(
		(
			(
				( $arg == 'B' ) ? 'bus' : ( $arg == 'A' )
			) ? 'airplane' : ( $arg == 'T' )
		) ? 'train' : ( $arg == 'C' )
	) ? 'car' : ( $arg == 'H' )
) ? 'horse' : 'feet'

Je te laisse remplacer les expressions par les valeurs booléennes correspondantes, tu comprendras ce qui se passe.

Avec la plupart des autres langages issus du C, l'expression aurait été parenthésée comme ça :

( $arg == 'B' ) ? 'bus' : (
	( $arg == 'A' ) ? 'airplane' : (
		( $arg == 'T' ) ? 'train' : (
			( $arg == 'C' ) ? 'car' : (
				( $arg == 'H' ) ? 'horse' : 'feet'
			)
		)
	)
)

Ce qui est un comportement bien plus intuitif.

A lire quand même, car dans l'article "A Fractal of Bad Design" tout n'est pas à prendre pour argent comptant : http://forums.devshed.com/php-development-5/php-fractal-bad-design-hardly-929746.html

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment