7
votes

Énumérez toutes les constantes définies d'un fichier en PHP

J'ai des fichiers PHP qui inclut certaines constantes de langue xxx

maintenant, je dois lire chaque fichier et répertorier toutes les constantes et leurs valeurs

et pour renvoyer une sortie. Comme ceci:

Nom constant: la valeur est la suivante:

Donc, je pense qu'il devrait y avoir une fonction pour répertorier toutes les constantes définies d'un fichier PHP donné.

Je suis au courant des fonctions telles que Token_Get_All ou get_defined_Constants mais je n'étais pas capable de le faire.


8 commentaires

Qu'est-ce qui ne fonctionne pas si vous utilisez get_defined_constants () ?


J'ai noté que j'ai lu ces manuels, je suis concernant ici pour obtenir toutes les constantes définies d'un (fichier PHP spécifique) et non toutes les constantes définies d'un système


Ah Ok, maintenant je l'obtiens. Y a-t-il un autre code PHP / contenu dans ces fichiers?


Peut-être certaines lignes qui sont des commentaires mais elles sont spécifiées pour les constantes de langue.


Bien que je suis sympathique pour cette question, je me demande quelle est la nécessité pratique de déterminer les constantes définies dans un fichier spécifique. Au fur et à mesure que votre projet grandit, vous voudrez peut-être mettre certaines définitions constantes en fichiers externes qui sont incluent D dans un autre fichier, simplement pour la lisibilité sans changement de fonctionnalité ...


Pour autant que je sache, le tokenizer (comme vous l'avez dit) serait le seul moyen de le faire. Où avez-vous lu exactement quand j'essayais ça?


Je préférerais préfixer toutes les constantes dans un fichier unique, avec préfixe unique. Si vous souhaitez éviter l'analyse du fichier via Preg G _ * ou des méthodes similaires


@Deceze: J'écris une section de montage de la langue. Ce que j'ai besoin de lire tous les fichiers de langue et d'afficher les constantes définies à un utilisateur et laissez-les les éditer lorsqu'il préfère.


5 Réponses :


2
votes

Ceci est le script PHP dont vous avez besoin:

array(5) {
  ["_SEARCH"]=>
  string(6) "Search"
  ["_LOGIN"]=>
  string(5) "Login"
  ["_WRITES"]=>
  string(6) "writes"
  ["_POSTEDON"]=>
  string(9) "Posted on"
  ["_NICKNAME"]=>
  string(8) "Nickname"
}


1 commentaires

C'est une bonne approche, mais pouvons-nous str_replacez tous les commentaires comme / * Commentaires * / Et qu'est-ce que c'est à l'intérieur?



8
votes

Si les fichiers ne contiennent que définir les instructions , vous pouvez utiliser get_defined_constants : xxx

Qu'est-ce que c'est essentiellement: < code> get_defined_constants (true) nous donne un tableau de tableaux avec toutes les constantes disponibles, triées par sections (noyau, utilisateur, ..) - Le tableau sous la clé "L'utilisateur" nous donne toutes les constantes définies par l'utilisateur que nous défini dans notre code PHP en utilisant définir , jusqu'à ce point. array_diff_assoc nous donne la différence entre ce tableau avant et après que le fichier a été inclus. Et c'est exactement une liste de toutes les constantes qui ont été définies dans ce fichier spécifique (tant qu'il n'y a aucune des déclarations Un duplicata, ce qui signifie une constante avec ce nom exact a été défini avant - mais cela entraînerait une erreur de toute façon).


5 commentaires

Mais comment savoir que l'avant et après la constante d'un fichier PHP est "utilisateur". S'il vous plaît expliquer plus sur l'utilisation de cette


Ouais, je suis d'accord avec Mac, supposé que nous travaillions avec un cadre et les constantes d'un fichier déjà incluse, nous ne pouvons tout simplement pas "exclure" le fichier et "re-inclure"


Comme ces fichiers sont censés être des fichiers de langue, je doute qu'ils soient inclus auparavant. Donc, pas de problème avec ça. @Mactaylor cet "utilisateur" Il n'y a pas le nom d'une seule constante, c'est la section où les constantes appartiennent (ce qui signifie qu'ils sont "utilisateur" - définis et non par PHP lui-même). $ Constantes ['utilisateur'] est une matrice de toutes les constantes que vous avez définies dans votre code via définir () .


@Niko peut-être trop tard, mais ... une petite correction, si vous utilisez array_diff_assoc () et Attribuez comme première valeur matrice plus petite, il retournera vide tableau () Ce cas que nous devons utiliser: $ newConstants = array_diff_assoc ($ constantesAfterinclude, $ constantesBEforeInclude);


@Jaglicic merci, bonne prise. J'ai mis à jour le code en conséquence.



0
votes

En supposant que vous souhaitiez faire cela au moment de l'exécution, vous devez consulter Réflexion PHP , spécifiquement au réflexionClass :: getConstants () qui vous permet de faire exactement ce que vous semblez vouloir.


1 commentaires

Il définit les constantes en utilisant «Définir», sans utiliser le mot-clé «const». et pas non pas dans une classe



1
votes

en retard au jeu ici mais j'ai eu un problème similaire. Vous pouvez utiliser une fonction de substitution () Inclure () qui enregistre les constantes dans une matrice globale accessible.

Array
(
    [page1.php] => Array
        (
            [_SEARCH] => Search
            [_LOGIN] => Login
            [_WRITES] => writes
            [_POSTEDON] => Posted on
            [_NICKNAME] => Nickname
        )

    [page2.php] => Array
        (
            [_THIS] => Foo
            [_THAT] => Bar
        )

)


0 commentaires

-1
votes

J'ai aussi eu le même problème. Je suis allé de la suggestion de Jondinham, mais je préfère utiliser regex, car il est un peu plus facile de contrôler et de flexible. Voici ma version de la solution: xxx


1 commentaires

Une bonne réponse, mais je pense que c'est une autre question. Je vous gites un +1, ce sera trompeur dans ce cas. Vos suites de réponse plus à cette question -> wordpress.stackexchange.com/questions/165507/... Mais merci, tu m'as aidé :)