Page 1 sur 1

Intépréter littéralement un if

Posté : 14 août 2009, 17:40
par Aquitanium
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

Re: Intépréter littéralement un if

Posté : 14 août 2009, 17:55
par Calimero
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()

Re: Intépréter littéralement un if

Posté : 14 août 2009, 23:15
par Berzemus
il ne suffirait pas que is_single() renvoie une valeur booléenne ?

Re: Intépréter littéralement un if

Posté : 16 août 2009, 07:45
par Aquitain
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

Re: Intépréter littéralement un if

Posté : 16 août 2009, 09:46
par monintranet
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()))

Re: Intépréter littéralement un if

Posté : 16 août 2009, 11:39
par Berzemus
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 ?

Re: Intépréter littéralement un if

Posté : 16 août 2009, 15:30
par Aquitanium
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

Re: Intépréter littéralement un if

Posté : 16 août 2009, 19:10
par Ryle
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 !!! ;)

Re: Intépréter littéralement un if

Posté : 17 août 2009, 03:01
par Calimero
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:

Re: Intépréter littéralement un if

Posté : 17 août 2009, 10:08
par Aquitain
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