PHP Chargement automatique dans les espaces de noms
J'ai eu un léger problème avec le chargement automatique dans mon espace de noms. Comme indiqué sur le manuel PHP ici: http://us.php.net/manual/en/language.namespaces.rules.php vous devriez être en mesure d'auto-chargement de l'espace de noms des fonctions avec un nom complet par ex. \colle\common\is_email().
Chose est que j'ai une fonction spl_autoload_register(array($importation, la "charge")); dans le délai initial de l'espace de noms mais chaque fois que j'essaie de l'appeler \colle\common\is_email() à partir de l'initiale de l'espace de noms, il ne passera pas que la fonction autoload mais lors de l'utilisation de nouveaux is_email() (dans le contexte d'une classe), il sera. Je n'ai pas le manuel dit que je peux chargement automatique de noms entièrement qualifiés mais je ne peux pas :.
Voici mon code:
namespace glue;
require_once 'import.php';
use glue\import as import;
use glue\core\router as router;
$import = new import();
spl_autoload_register(array($import, "load"));
/** Works and echos glue\router **/
$router = new router();
/** Don't do nothing **/
$cheese = \glue\common\is_email($email);
J'ai aussi essayé ce code:
namespace glue;
require_once 'import.php';
use glue\import as import;
use glue\core\router as router;
use glue\common;
$import = new import();
spl_autoload_register(array($import, "load"));
/** Works and echos glue\router **/
$router = new router();
/** Don't do nothing **/
$cheese = common\is_email($email);
et enfin ce code:
namespace glue;
require_once 'import.php';
use glue\import as import;
use glue\core\router as router;
use glue\common\is_email as F;
$import = new import();
spl_autoload_register(array($import, "load"));
/** Works and echos glue\router **/
$router = new router();
/** Don't do nothing **/
$cheese = F($email);
OriginalL'auteur Sammaye | 2010-09-04
Vous devez vous connecter pour publier un commentaire.
Voici la seule bonne réponse.
Chaque espace de noms a besoin de sa propre spl_autoload_register() fonction.
aussi, spl_autoload_register() syntaxe changé en 5.3:
La suivante devrait fonctionner:
Voici quelques vivre le code qui fonctionne!
dans ../WebPageConsolidator.inc.php:
dans test.php:
Donc je sais que ça fonctionne.
Oui il ne va que dans spl_autoload lors de l'utilisation du mot clé new........grrr pourquoi manuel PHP dire que je peux autoload fonctions si je ne peux pas, pourriez avoir à prendre ce.
Autload uniquement avec classes.
Oui comme je l'ai toujours pensé, zut la possibilité de charger des fonctions dépend de la résolution de noms à la structure de répertoire serait bien bon. Je pourrais suggérer à eux, merci pour votre aide :).
OriginalL'auteur Theodore R. Smith
Utilisation Compositeur à chargement automatique de vos Classes PHP.
Découvrez comment faire dans mon récent billet de blog: https://enterprise-level-php.com/2017/12/25/the-magic-behind-autoloading-php-files-using-composer.html
Assurez-vous. 7 ans plus tard, beaucoup de choses ont changé haha. Je voulais mettre ici une référence à la nouvelle façon de faire que j'ai débarqué dans cette question moi-même à partir de Google.
OriginalL'auteur EnchanterIO
L'idée fausse à la question de l'OP, c'est probablement que les fonctions/méthodes seraient soumis à chargement automatique – qu'ils ne le sont pas. Le chargement automatique est déclenchée uniquement par le référencement de classes.
Cela étant dit, il reste encore la question sur l'auto-chargement de classes dans les espaces de noms:
À compter de 2017 l'actuel PHP-FIG standard pour le chargement automatique est le PSR-4, qui prévoit ce qui suit autochargeur de code pour des espaces de classes:
Les spécifications complètes de texte peut être trouvé à PSR-4: Autochargeur.
L'exemple de code ci-dessus (et d'une autre pour autoload de plusieurs espaces de noms) peut être trouvé à Exemple Implémentations du PSR-4 (ou GitHub: fig-normes/acceptés/PSR-4-autochargeur-exemples.md).
Salut @Sammaye, merci pour l'astuce. Avez-vous un lien avec plus d'informations à portée de main? Je n'arrive pas à trouver quelque chose à propos de ce changement.
OriginalL'auteur Jpsy