Structure de controle PHP avec : ?

WRInaute impliqué
Bonjour,


Je veux modifier un forum PHP BB ..

et je tombe sur ce code ...

$this->meta['meta_title'] = ( !empty($this->meta['meta_title']) ) ? $this->meta_filter_txt($this->meta['meta_title']) : $page_title;


Qui pourrait m'aider à trouver comme interpréter cette structure de contrôle alternative .. ???

= ? :

MERCI
 
WRInaute impliqué
<?php
$hour = 11;

print $foo = ($hour < 12) ? "Good morning!" : "Good afternoon!";

?>
return Good morning!
 
WRInaute impliqué
je crois avoir trouve...

Par contre si quelcun sait comment retirer du TITLE des pages de billet le nom du forum ..ca m'intéresse ..
(avec PHPBB SEO)

je vois que ça n'a pas été modifié sur le forum WRI ..le rappel du nom du forum dans chaque titre de page n'a aucun intéret.
 
WRInaute accro
C'est une autre manière d'écrire un if {} else {} en php (perso je ne suis vraiment pas fan de cette notation qui est certes plus condensée mais moins lisible, menfin ça doit être une question d'habitude).
 
WRInaute passionné
mariea a dit:
Bonjour,


Je veux modifier un forum PHP BB ..

et je tombe sur ce code ...

$this->meta['meta_title'] = ( !empty($this->meta['meta_title']) ) ? $this->meta_filter_txt($this->meta['meta_title']) : $page_title;


Si je ne me trompe pas, cela revient à écrire :

Code:
if (!empty($this->meta['meta_title']) {
   $this->meta['meta_title'] = $this->meta_filter_txt($this->meta['meta_title'])
} else {
   $this->meta['meta_title'] = $page_title;
}

À confirmer svp, car j'ai un petit doute quand même n'aimant pas écrire de cette manière aussi condensé
 
WRInaute impliqué
merci .. oui. Si la condition est vraie, on valide la variable devant les deux points. Si false, c'est l'autre.


Dans PHPBB includes/functions.php
ligne 4014
le titre semble être créé ici :

function build_meta( $page_title = '') {
$this->meta['meta_desc'] = ( !empty($this->meta['meta_desc']) ) ? $this->meta['meta_desc'] : $this->meta_filter_txt($page_title . ' : ' . $this->meta['meta_desc_def']);
 
WRInaute accro
Ca s'appelle un opérateur ternaire (c'est le seul opérateur à 3 arguments).

a?b:c vaut b si a est vrai et c sinon

Jacques.
 
WRInaute impliqué
pour la modification du TITLE

si ça intéresse quelcun voila ou ça se passe

viewtopic.php

// http://www.phpBB-SEO.com SEO TOOLKIT BEGIN - TITLE
$extra_title = ($start > 0) ? ' - ' . $user->lang['Page'] . ( floor( ($start / $config['posts_per_page']) ) + 1 ) : '';
page_header($topic_data['topic_title'] . ' : ' . $topic_data['forum_name'] . $extra_title);


il faut enlever
: ' . $topic_data['forum_name'] . $extra_title

:D :D :D :D
 
WRInaute passionné
UsagiYojimbo a dit:
C'est une autre manière d'écrire un if {} else {} en php (perso je ne suis vraiment pas fan de cette notation qui est certes plus condensée mais moins lisible, menfin ça doit être une question d'habitude).

et d'age d'aussi :mrgreen: je me mets dans le lot
 
WRInaute passionné
jcaron a dit:
Ca s'appelle un opérateur ternaire (c'est le seul opérateur à 3 arguments).
a?b:c vaut b si a est vrai et c sinon
Jacques.
+1
mais apparemment ce serais un poil plus lent qu'un if... donc je sais pas si c'est bon de l'utiliser...
 
WRInaute accro
Ce n'est pas exactement la même chose qu'un if, puisqu'il y a un résultat au final (alors que if évalue l'une ou l'autre option, mais le résultat de part et d'autre est perdu si tu ne l'affectes pas quelque part). Si tu as besoin du résultat et que tu en fais la même chose dans les deux cas, il n'y a pas de raison que ce soit plus lent.

a=b?c:d est équivalent à if (b) {a=c} else {a=d}

Dans le cas où "a" est quelque chose d'un peu plus complexe (genre $a[$b][$c]), l'opérateur ternaire évite de le parser deux fois, tu y gagnes donc quelques cycles à ce stade-là. Rien de flagrant...

Après c'est vraiment une question de style, et dans certains cas ça permet de faire des choses plus facilement. Exemple: tu appelles une fonction avec une tripotée d'arguments, et il y a juste un paramètre qui change suivant une condition. Si tu utilises if, tu dois faire:
if (condition)
{
fonction(parametre1,parametre2,parametre3,valeur1);
}
else
{
fonction(parametre1,parametre2,parametre3,valeur2);
}

Si tu utilises un opérateur ternaire, tu peux faire:
fonction(parametre1,parametre2,parametre3,condition?valeur1:valeur2);

Si les paramètres sont des expressions compliquées, tu y gagnes clairement en lisibilité.

Jacques.
 
WRInaute accro
sur, par exemple
echo ($type=="vir"?"virement":"solde")." ".($value>0?"positif":($value==0?"nul":"négatif"));
imagine la complexité des if pour obtenir la même valeur
 
Discussions similaires
Haut