6
votes

Réinitialiser un espace de noms dans PHP?

Comment puis-je "réinitialiser" un espace de noms à la mondialisation? Compte tenu du code suivant: xxx

myfile.php tentera maintenant de charger toutes ses classes dans l'espace de noms FOO, même si ses classes sont dans l'espace de noms global. Maintenant, ce ne serait pas un gros problème d'échanger l'ordre de ces lignes, mais comment je traiterais de myfile.php avoir un autocharger? Il essaiera de charger les classes dans l'espace de noms FOO.


0 commentaires

4 Réponses :


2
votes

Peut-être que je n'ai pas bien compris votre question; Dans ce cas, pourriez-vous donner un exemple de ce que vous obtenez et ce que vous attendiez?



Êtes-vous sûr qu'il essaiera de charger les fonctions à partir de myfile.php code> dans l'espace de nom code> foo code> p>

Considérant que j'ai un fichier (TEMP -2.php) em> qui ressemble à ceci: p> xxx pré>

et un autre (my_other_file.php) em> qui ressemble à ceci: xxx pré>

Lorsque j'appelle le premier de mon navigateur, je reçois cette sortie: p> xxx pré>

Ceci semble indiquer la seconde La fonction n'est pas à l'intérieur d'un espace de noms, sauf le global - qui correspond au fait qu'il n'est pas déclaré dans aucun espace de noms. P>

Si je me souviens bien, l'instruction "Namespace" n'est valable que pour le fichier est utilisé dans, et non pour les fichiers inclus. p>


p>

Le Les noms d'importation ne peuvent pas entrer en conflit avec des classes définies dans le même fichier page de la Nom Les espaces FAQ semble indiquer cela aussi. P>


J'espère que cela vous aide et j'ai compris la question correctement ... p>


Edit: BTW, échangeant l'ordre des lignes, comme celui-ci: P>

Fatal error: Namespace declaration statement has to be the very first statement in the script


0 commentaires

9
votes

myfile.php doit déclarer l'espace de noms qu'il souhaite être. Si vous voulez vous assurer que myFile.php se charge dans l'espace de noms global, je pense que vous pouvez mettre xxx

autour du corps de myfile.php. Assurez-vous d'utiliser les accolades, sinon vous redéfinissez le reste du fichier dans lequel myfile.php est inclus pour également être dans l'espace de noms global.


2 commentaires

Vous n'avez pas besoin de cette déclaration vide d'espace de noms. Il sera pas affecter les fichiers qui l'inclus, comme Espace de noms s'appliquent uniquement à leur propre fichier.


Mais c'est la réponse de la question, c'est-à-dire un moyen de revenir dans l'espace de noms global et cela fonctionne bien.



12
votes

Les espaces de noms fonctionnent sur un par fichier . Si myfile.php ne déclare pas d'espace de noms, tout ce qui appartiendra à l'espace de noms global, quel que soit l'espace de noms dans lequel inclure a été utilisé.

Histoire longue courte, Espace de noms Appliquer uniquement à leur propre fichier, non inclut.


1 commentaires

US2.php.net/manual/fr/language.namespaces.basics. PHP exemples sur la page pour des exemples de ceci.



0
votes

J'aimerais juste choisir sur ceci avec mes conclusions. Étant donné que PHP ne peut pas gérer des exceptions dans les méthodes de __Tostring, la solution est de le faire vous-même: quelque chose du long des lignes de xxx

Cependant, ce qui devient vraiment bizarre, l'espace de noms de l'appel à Error: : _getexceptage ($ E) devient la même chose que la classe dans laquelle __ tostring a été défini - et je n'ai pas été capable de trouver un moyen de trouver tout sauf le préfixe de mon code de manutention d'exception avec \ , c'est-à-dire que chaque appel à n'importe quelle classe in getExceptage doit devenir \ someclass :: staticmethod () .

même va Pour les fichiers inclus, tout - tout le code, car l'exception lancée devient intégrée à l'espace de noms de la classe défectueuse. Testé avec PHP 5.3.17


0 commentaires