2017-07-30 1 views
0

J'apprends à utiliser les espaces de noms en php, et j'essaie de mettre une variable dans le nom de l'espace de nom lorsque j'appelle une constante. Voici mon code.appeler un espace de noms php avec une variable

fruits2.php

<?php 
namespace fruits\red; 
const redfruit = 'tomato'; 

fruits1.php

<?php 
namespace fruits; 

require_once('fruits2.php'); 

const myconst = 'banana'; 

echo myconst; // displays banana 

echo '<br>'; 

echo \fruits\red\redfruit; // displays tomato 

echo '<br>'; 
$color = 'red'; 
echo \fruits\$color\redfruit; // Parse error: syntax error, unexpected '$color' (T_VARIABLE), expecting identifier (T_STRING) 

Je ne comprends pas comment je peux appeler la constante dans cette dernière ligne. J'ai essayé avec ce qui suit mais il est considéré comme une simple chaîne.

echo '\fruits\\'.$color.'\\redfruit'; 

Je suis assez sûr que je devrais être en mesure de le faire, parce que je pouvais faire quelque chose de très similaire lorsque vous appelez une classe dans une autre partie de ce code:

$name = '\fruits\basket\\'.$color.'\\eat'; 
$c = new $name(); //this works 

Tout le monde connaît la réponse pour que? Merci!

+0

vous ne pouvez pas parce que vous n'êtes pas autorisé à mettre des variables où vous voulez, comme 'class foo extends $ var {..}' qui ne fonctionnera pas non plus. Même chose avec 'public function $ var ($ a, $ b)' quelque chose que vous n'êtes pas censé faire, même PHP doit avoir des règles, Man! – ArtisticPhoenix

Répondre

0

Utilisez le mot-clé constant:

$name = constant("fruits\\$color\\redfruit"); 

Vous devez échapper aux barres obliques. Le nom doit également être qualifié (par rapport à l'espace de noms racine).

+0

La fonction constante() a fait l'affaire. Merci pour l'aide:) – Yann