Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 13h37   #1
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Par défaut Insertion de variable dans des chaines.

Bonjour,

Voilà je viens vers vous car je n'ai pas vraiment trouvé de réponse sur internet concernant mon "problème". Je veux faire un message personnalisé avec des variables à l’intérieur. Et le problème étant que je ne valorise mes variables que après dans mon application.

Est-ce la seule (et la bonne) solution de faire quelque chose comme :

Code :
1
2
3
4
 
$texte = "Afin de valider définitivement votre inscription,
merci d'envoyer le cas échéant le règlement des frais d'inscription PRIX"
str_replace('PRIX',$prix,$texte);
Ou voyez vous un autre moyen de faire?
Je précise que j'ai tout de même un certains nombre de variables à insérer (de l'ordre de 6 à 8). Donc je ne pense pas que faire 8 fois la ligne de code ci-dessus soit de bonne augure.

Sinon je pourrais peut être essayer de faire 2 tableaux avec mes variables respectant le même ordre et les utiliser avec la fonction str_replace()?

Merci d'avance pour vos réponses.
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h44   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Plus élégant :
Code :
1
2
3
4
5
<?php
$texte = "Afin de valider définitivement votre inscription,
merci d'envoyer le cas échéant le règlement des frais d'inscription %s";
printf($texte, $prix);
?>
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 15h32   #3
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
D'accord je pense aussi utiliser printf (que je ne connaissais pas) dommage de n'avoir pu avoir d'autres avis.
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 15h35   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Qu'est ce qui ne te convient pas avec cette méthode ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 15h51   #5
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Jamais dit qu'elle ne me convenait pas
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 16h07   #6
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
En voilà une mais qui n'est pas une "bonne pratique".

Utiliser des guillemets double et mettre directement ta variable dans la chaîne (PHP interprète les variables qu'il rencontre dans une chaîne si elle est encadrée par des guillemets double) :

Code :
1
2
3
4
<?php
$texte = "Afin de valider définitivement votre inscription,
merci d'envoyer le cas échéant le règlement des frais d'inscription $prix";
?>
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 16h11   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

Il y a en effet plus de 36 façons de mettre des variables dans les chaines de caractère. Tu trouvera de bonnes idées par ici :http://php.net/manual/fr/language.types.string.php

Je vais faire le tour de celles que j'utilise le plus:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
// Syntaxe classique
$str = "Une chaine contenant $ma_var";
$str = "Une chaine contenant $ma_var['offset']";
$str = "Une chaine contenant $mon_obj->attr";
 
// Syntaxe complexe
$str = "Une chaine contenant {$ma_var}salut";
 
// Formatter une chaine
$str = sprintf("Une chaine de taille %d contenant %s", length($ma_var) $ma_var);
Plus Sexy!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
// Syntaxe heredoc
$str <<< HTML
<h1>$ma_var</h1>
HTML;
 
// Syntaxe nowdoc (équivalent du guillemet simple)
// les variables ne sont pas intérpretées
// PHP 5.3
$str <<< 'HTML'
<h1>$ma_var</h1>
HTML;
PLUS SEXY!
Code :
1
2
3
4
5
6
7
 
// L'usage des closures
// pratique mais pas forcément lisible
// PHP 5.3
$_ = function ($v) { return $v; };
$str = "On va interpreter {$_(UNE_CONSTANTE)}";
$str = "On va interpreter {$_((isset($a) ? $a : 0))}";
Quelques fonctions pratiques
Code :
1
2
3
4
5
6
 
// Afficher un tableau
$str = implode(',', $array);
 
// Découper une chaine
$array = explode(',', "1,2,3,4,5");
Pour les templates
Code :
1
2
3
4
5
6
 
// Bufferisation 
ob_start();
echo "Hello";
$str = ob_get_contents();
ob_end_clean();
Et le légendaire oubli de tous les programmeurs PHP:
Code :
1
2
3
4
5
6
7
8
 
<body>
<h1><?=$title;?></h1>
<?php if ($post): ?>
<div> ... </div>
<?php else: ?>
<div> .... </div>
<?php endif; ?>
Y'a encore bien d'autres façons de manipuler les chaines mais je vais m'arrêter là.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 16h31   #8
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Bonjour Benjamin

Est ce que ça fonctionne vraiment ton code :
Code :
$str = "Une chaine contenant $ma_var['offset']";
parce que chez moi j'obtiens Error::E_PARSE

Je suis obligé de le coller entre accolades :
Code :
$str = "Une chaine contenant {$ma_var['offset']}";
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 16h35   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Désolé j'avais oublié... Je mets mes variables dans des chaines systématiquement entre accolades alors j'oublie.

Remarque, ça ça marche:
Code :
1
2
3
 
$a = array('hello');
echo "Just wanna say $a[0]";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 16h58   #10
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Ok merci, je pense utiliser printf() qui réponds à tous mes besoins. C'était surtout l'idée d'avoir des variables de portées différentes (session, locales) qui d'après pouvaient poser un problème.
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h58.


 
 
 
 
Partenaires

Hébergement Web