Comment puis-je "réinitialiser" un espace de noms à la mondialisation? Compte tenu du code suivant: 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. P> P>
4 Réponses :
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?
Considérant que j'ai un fichier (TEMP -2.php) em> qui ressemble à ceci: p> et un autre (my_other_file.php) em> qui ressemble à ceci: Lorsque j'appelle le premier de mon navigateur, je reçois cette sortie: p> 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> 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> Edit: BTW, échangeant l'ordre des lignes, comme celui-ci: P>
Ê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>
p>
J'espère que cela vous aide et j'ai compris la question correctement ... p>
Fatal error: Namespace declaration statement has to be the very first statement in the script
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 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. P> P>
Vous n'avez pas besoin de cette déclaration vide d'espace de noms. Il sera pas i> affecter les fichiers qui l'inclus, comme Espace de noms code> 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.
Les espaces de noms fonctionnent sur un par fichier em>. 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 Histoire longue courte, inclure code> a été utilisé. P>
Espace de noms code> Appliquer uniquement à leur propre fichier, non inclut. P>
US2.php.net/manual/fr/language.namespaces.basics. PHP exemples sur la page pour des exemples de ceci.
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 Cependant, ce qui devient vraiment bizarre, l'espace de noms de l'appel à 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 P> P> Error: : _getexceptage ($ E) code> devient la même chose que la classe dans laquelle
__ tostring code> 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
\ code>, c'est-à-dire que chaque appel à n'importe quelle classe in
getExceptage code> doit devenir
\ someclass :: staticmethod () code>. p>