193 votes

Inclure la constante en chaîne sans concaténation

Est-il possible en PHP pour inclure une constante dans une chaîne sans concaténation ?

162voto

Pekka 웃 Points 249607

N °

Cordes, n’a aucun moyen pour PHP dire les données de chaîne apart et identificateurs constants. Cela vaut pour tous les formats de chaîne en PHP, y compris la syntaxe heredoc.

``est une autre façon de se procurer une constante, mais un appel de fonction ne peut être mis à une chaîne sans concaténation, ni.

Manuel sur les constantes PHP

125voto

Felix Kling Points 247451

Oui c’est (en quelque sorte  ;)) :

C’est sans doute pas ce que vous visaient, mais je pense que, techniquement, ce n’est pas concaténation mais une substitution et à partir de cette hypothèse, il comprend une constante dans une chaîne sans concaténation.

76voto

Raveren Points 4772

Pour utiliser des constantes à l'intérieur de chaînes vous pouvez utiliser la méthode suivante:

define( 'ANIMAL', 'turtles' ); 
$constant = 'constant';

echo "I like {$constant('ANIMAL')}";


Comment cela fonctionne?

Vous pouvez utiliser n'importe quelle chaîne de caractères nom de la fonction et de l'arbitraire de paramètres

On peut placer aucun nom de la fonction dans une variable et de l'appeler avec les paramètres à l'intérieur d'une chaîne de caractères entre guillemets. Fonctionne avec de multiples paramètres.

$fn = 'substr';

echo "I like {$fn('turtles!', 0, -1)}";

Produit

J'aime les tortues

Les fonctions anonymes trop

Vous pouvez également utiliser les fonctions anonymes à condition que vous êtes en cours d'exécution de PHP 5.3+.

$escape   = function ( $string ) {
    return htmlspecialchars( (string) $string, ENT_QUOTES, 'utf-8' );
};
$userText = "<script>alert('xss')</script>";
echo( "You entered {$escape( $userText )}" );

Produit échappé html comme prévu.

Rappel des tableaux pas permis!

Si vous êtes sous l'impression que le nom de la fonction peut être appelable, ce n'est pas le cas, comme un tableau qui retourne true lorsque passée de is_callable serait la cause d'une erreur fatale lorsqu'il est utilisé dans une chaîne de caractères:

class Arr
{

    public static function get( $array, $key, $default = null )
    {
        return is_array( $array ) && array_key_exists( $key, $array ) 
            ? $array[$key] 
            : $default;
    }
}

$fn = array( 'Arr', 'get' );
var_dump( is_callable( $fn ) ); // outputs TRUE

// following line throws Fatal error "Function name must be a string"
echo( "asd {$fn( array( 1 ), 0 )}" ); 

Gardez à l'esprit

Cette pratique est mal conseillé, mais parfois, les résultats dans beaucoup plus lisible le code, donc c'est à vous - la possibilité est là.

27voto

Macswork Points 59
define( 'FOO', 'bar');  
$FOO = FOO;  
$string = "I am too lazy to concatenate $FOO in my string";

14voto

thetaiko Points 5620
define('FOO', 'bar');
$constants = create_function('$a', 'return $a;');
echo "Hello, my name is {$constants(FOO)}";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X