Intépréter littéralement un if

Aquitanium
Invité n'ayant pas de compte PHPfrance

14 août 2009, 17:40

Bonjour,

En cette torpeur du mois d'août, je m'arrache les cheveux sur un bout de code. Je pense que je ne pose pas correctement le problème, et manque de logique.

En effet, je voudrai que Php intepréte *littéralement* un if, et lise un code sous la forme if (is_single()).

Or, si j'utilise $condition = (is_single()) et que je dis à Php if ($condition) , il vérifie que la condition existe (!), mais n'interprète pas pas l'expression comme if (is_single()). (D'ailleurs, j'ai un doute pour les parenthèses !).

Comment y parvenir ?

Je ne sais si mon explication est claire, c'est le genre de problème difficile à décrire.

Mille mercis pour votre aide.

Bien à vous,

Aquitain

ViPHP
ViPHP | 2287 Messages

14 août 2009, 17:55

Saut, je me permets de reformuler ton besoin ( si toutefois j´ai bien compris ) :

- stockage de code dans une variable pour une execution ulterieure dans le script => voir les fonctions include() (oui, on peut aussi l´utiliser comme ca...), ou encore eval(), ou bien encore call_user_func() et call_user_func_array()
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 4039 Messages

14 août 2009, 23:15

il ne suffirait pas que is_single() renvoie une valeur booléenne ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Aquitain
Invité n'ayant pas de compte PHPfrance

16 août 2009, 07:45

Bonjour,

Merci pour votre aide à vous deux.

Mon problème n'est pas de récupérer la variable, je sais le faire, mais de l'utiliser comme condition.

Non, pas de booléen, la condition doit être en entier pour que ça fonctionne.

Merci. :)

Bien à vous,

VincentA

Eléphanteau du PHP | 17 Messages

16 août 2009, 09:46

tu peux tout "simplement" faire une fonction qui teste si ta variable est un entier non?

genre if (is_int($toto)) ou if (is_int(is_single()))

ViPHP
ViPHP | 4039 Messages

16 août 2009, 11:39

Or, si j'utilise $condition = (is_single()) et que je dis à Php if ($condition) , il vérifie que la condition existe (!), mais n'interprète pas pas l'expression comme if (is_single()). (D'ailleurs, j'ai un doute pour les parenthèses !).
Malgré la reformulation de Calimero, j'ai toujours pas saisi exactement ce que tu cherches à faire..

Php n'est pas un langage fonctionnel, il n'est pas prévu pour stocker des fonctions dans une variable, et encore moins les donner en argument
(même si quelques structures permettent de le faire).

J'imagine plus ou moins ce que tu veux faire, et je trouve en fait que les valeurs booléennes correspondent à ce que tu recherches.
function is_single($obj) {
       // retourne true si $obj est "single", false si pas.
       }

$condition = is_single(obj); // true si vrai, false si faux
if ($condition)
      {
       // code éxécuté si la condition est vraie
      }
      // code éxécuté si la condition est fausse;
      }
Ce qui m'amène à une autre question, dans ton exemple, is_single() se rattache à quoi ? Qu'est-ce qui est censé être single si tu ne donnes aucun paramètre à ta fonction ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Aquitanium
Invité n'ayant pas de compte PHPfrance

16 août 2009, 15:30

Bonjour,

Merci, Messieurs, grâce à vous, la solution a fini par apparaître.

En fait, je développe pour WordPress, mais la communauté, y compris américaine, a des connaissances plus limitées ou quelques oeillères. :)

Encore merci.

Aquitain

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 août 2009, 19:10

Modération :
Puisque ta question est résolue, je l'indique en ajoutant la petite icône verte "Résolu" pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.

Tu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente, si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2287 Messages

17 août 2009, 03:01

Bonjour,

Merci, Messieurs, grâce à vous, la solution a fini par apparaître.

En fait, je développe pour WordPress, mais la communauté, y compris américaine, a des connaissances plus limitées ou quelques oeillères. :)

Encore merci.

Aquitain
Merci pour ton merci, mais c'est quoi la solution finalement ? On aimerait bien comprendre le fin mot de l'histoire nous :wink:
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Aquitain
Invité n'ayant pas de compte PHPfrance

17 août 2009, 10:08

Ah oui, Calimero, je ne pensais pas que la solution pouvait t'intéresser, car c'est du bricolage !

En fait, j'avais mal posé le problème... Je ne pouvais demander à Php de vérifier et d'appliquer la condition en même temps. Donc j'opère en deux étapes... "Si ma condition est respectée, alors..."

En gros, avec WordPress qui est la solution que j'utilise, la syntaxe générique est, par exemple, if is_home() pour provoquer l'affichage d'un gadget sur la page d'accueil d'un site. A l'identique, on peut gérer un gadget pour un article particulier avec un santaxe comme if is_single('17') pour afficher un gadget sur l'article n°17...

Moi, je voulais automatiser le processus, avec ma fameuse condition.

Comment un bout de code sera plus explicite, je l'indique :

Code : Tout sélectionner

$template = $instance['template']; // Je récupère la valeur de template qui est dans liste déroulante prévoyant le plupart des cas possibles $id = $instance['id']; // Je récupère la valeur qui sert éventuellement à préciser le numéro d'article ou de page switch ($template) { case 'home': if (is_home()) { echo $before_widget; if ($title) { echo $before_title . $title . $after_title; } ?> <ul> <li> <?php echo $instance['filter'] ? wpautop($text) : $text; ?> </li> </ul> <?php echo $after_widget; } break; case 'front_page': if (is_front_page()) // Je ne reprécise pas le code, c'est le même ! Ainsi de suite... En fait, c'est un code "standard" WordPress { } break; case 'admin': if (is_admin()) { } break; case 'single': if (is_single($id)) // id, car on peut vouloir préciser le numéro de single... { } break; case 'sticky': if (is_sticky($id)) { } break; case 'page': if (is_page($id)) { } break; case 'author': if (is_author($id)) { } break; case 'archive': if (is_archive()) { } break; case 'search': if (is_search()) { } break; case '404': if (is_404()) { } break; case 'singular': if (is_singular()) { } break; default: } ?>
Voilà ! Je ne dis pas que ma solution est la meilleure (dompter Php me semble difficile), mais elle fonctionne.

Ceci posé, je suis à l'écoute de vos suggestions et critiques. Merci. :)

A plus tard,

Aquitain