2009-10-15 6 views
0

Je l'extrait suivant:question PHP rapide

if (empty($last_db_error)) { 
    echo "OK"; 
} else { 
    echo "Error activating subscription."; 
    echo "{$last_db_error}"; 
} 

Le problème est que "{$last_db_error}" non représentée, à moins que je viens d'utiliser $last_db_error, sans les guillemets et entre parenthèses. Ai-je raté quelque chose ici? La syntaxe ci-dessus n'est-elle pas correcte?

+0

-vous sûr qu'elle ne fonctionne pas? Cela fonctionne sur ma machine. Dois-je vous expédier ma machine? lol. – lemon

Répondre

6

Les parenthèses et les guillemets sont inutiles dans ce cas.

if (empty($last_db_error)) { 
    echo "OK"; 
} else { 
    echo "Error activating subscription."; 
    echo $last_db_error; 
} 

Fera le travail parfaitement.

BTW, même si vous pouvez mettre c'est $vars insides citations en PHP, pas recommandé car:

  • Il travaille pour des guillemets doubles uniquement, des guillemets simples affiche le nom var, ce qui conduit à l'erreur.
  • Il ralentit l'analyse des chaînes.

Il est beaucoup plus approprié de concaténer des variables à l'aide de l'opérateur point:

if (empty($last_db_error)) { 
    echo "OK"; 
} else { 
    echo "Error activating subscription.\n". 
      $last_db_error; 
} 

Et dès que vous avez beaucoup de texte à traiter, je vous conseille vivement d'utiliser le PHP alternative syntax. Par exemple:

<?php if (empty($last_db_error)): ?> 
     OK 
<?php else : ?> 
     Error activating subscription. 
     <?php echo $last_db_error; ?> 
<?php endif; ?> 
+0

L'interpolation de chaîne est très appropriée. "Ralentit l'analyse" et "ne fonctionne pas avec des guillemets simples" ne sont pas des arguments valables à mon avis. –

+0

Et, je suis sûr que l'OP sait tout ce que vous avez dit. Il s'intéresse en fait à la raison pour laquelle son code ne fonctionne pas, parce que c'est PHP valide. Je crois que ChrisRamakers a peut-être trouvé le problème. –

+0

@Ionut G. Stan: eh bien, si l'erreur et l'inefficacité des performances ne sont pas des arguments valables pour vous, qu'est-ce que c'est? Mais en effet, ChrisRamakers a une meilleure réponse que la mienne. –

1

Il suffit d'utiliser

echo $last_db_error; 

le reste est pas nécessaire ici.

0

Les accolades sont utilisées pour évaluer des noms de variables plus complexes. Si vous voulez que les accolades dans la sortie, essayez d'échapper à la leur, comme ceci:

if (empty($last_db_error)) { 
    echo "OK"; 
} else { 
    echo "Error activating subscription."; 
    echo "\{$last_db_error\}"; 
} 
+0

euh? Les accolades entre guillemets doubles sont parfaitement légales pour produire des variables comme celle-ci, pas besoin d'échapper, sauf si vous voulez vraiment imprimer les parenthèses. – ChrisR

+0

Je pensais que l'OP voulait que la sortie comprenne les accolades. Il semble qu'il n'a pas fait. – Marius

2

est $ last_db_error une chaîne ou un objet? S'il s'agit d'une chaîne, elle doit s'afficher correctement entre guillemets à l'aide d'accolades (comme vous l'avez indiqué ci-dessus) afin que le code semble correct.

Placez un var_dump($last_db_error) dans l'instruction else et vérifiez les résultats.

+1

Il semble que l'interpolation de chaîne fonctionne avec les objets définis par l'utilisateur qui ont une méthode '__toString'. En PHP 5.2.11 au moins. –

0

Pour moi, il fonctionne ok:

<?php 
$last_db_error = "LLLLLLLLLLLL"; 
echo "{$last_db_error}"; 

Il me montre llllllllllll

0

Peut-être que vous utilisez une sorte de système de modèles qui parse tout à l'intérieur { .... }?