A voir également:
- Vous avez flashez ce qr code.ça ne sert à rien. you have flashed this qr code. it's no use.
- Scanner qr code pc - Guide
- Comment créer un qr code - Guide
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Qr code spotify - Guide
4 réponses
Bonjour,
Il me semble que l'utilisation des NameSpace .. n'enlève pas le fait qu'il faille INCLURE les fichiers PHP les contenant....
Si je reprend un des exemples d'un tuto dispo sur le net.. on a :
Dans un fichier F.ns.php, placez ceci :
Dans un autre fichier quelconque, essayez le code suivant :
https://openclassrooms.com/fr/courses/1217456-les-espaces-de-noms-en-php
même chose expliquée dans la doc PHP :
https://www.php.net/manual/fr/language.namespaces.basics.php
Il me semble que l'utilisation des NameSpace .. n'enlève pas le fait qu'il faille INCLURE les fichiers PHP les contenant....
Si je reprend un des exemples d'un tuto dispo sur le net.. on a :
Dans un fichier F.ns.php, placez ceci :
<?php namespace A\B\C\D\E\F; function getNamespace() { echo __NAMESPACE__; } ?>
Dans un autre fichier quelconque, essayez le code suivant :
<?php require 'F.ns.php'; use A\B\C\D\E\F as nsF; nsF\getNamespace(); // Se transforme en A\B\C\D\E\F\getNamespace(). ?>
https://openclassrooms.com/fr/courses/1217456-les-espaces-de-noms-en-php
même chose expliquée dans la doc PHP :
https://www.php.net/manual/fr/language.namespaces.basics.php
shared
Messages postés
105
Date d'inscription
Statut
Membre
Dernière intervention
5
Merci, j'ai créé une clase d'autoloading avecl a fonction spl_autoload_register et ca fonctionne. Maintenant le problème rencontré est plus bizare encore, je le detail dans le commentaire en réponse a Jubasse. Je te remercie de ton aide.
Salut, l'utilisation du use ne permet pas l'utilisation de la classe mais crée une référence à celle-ci si elle existe :
Ici le FooBar sera référencé comme étant Bar\FooBar;
Pour utiliser la classe Bar\FooBar, il faudra l'inclure.
Cependant, il existe un moyen d'autocharger les classes à l'aide des Namespaces, c'est l'autoloading.
Il existe plusieurs normes d'autoloading en php suivant les principes PSR (PHP Standards Recommandation) https://www.php-fig.org/psr/ .
La première norme d'auto-chargement des classes était le PSR-0 qui est maintenant déprecié au profit du PSR-4.
Le but du PSR-4 est de normer tes namespaces comme ton architecture de dossiers :
qui te permettra d'appeler ta classe fichier de la manière suivante :
Le but étant de bien mapper ta racine (ex : on map le dossier app avec le namespace MonApp).
Pour utiliser le PSR-4 tu as plusieurs possiblités mais la plus simple est d'utiliser Composer.
Voici un exemple en Anglais : https://experiencehq.net/blog/how-and-when-to-use-psr-4-autoloading-in-your-craft-plugins
Il faut simplement télécharger composer.phar sur https://getcomposer.org/ tu place le fichier à la racine de ton projet, il faut aussi avoir PHP en ligne de commande.
Tu dois seulement faire à l'aide d'un invite de commande :
Suivre les instructions, ouvrir un fichier générer nommé composer.json et y ajouter simplement ce qui est dit au dessus.
(en gros on ajoute un index autoload, on précise le type d'autoloading (psr-4) ,
ensuite on indique que le namespace "MonNamespace\\" mappera le dossier "dossier")
une fois tout cela crée, il suffit de faire :
Voila, j'espère t'avoir éclairé.
namespace Foo;
use Bar\FooBar;
$fooBar = new FooBar();
Ici le FooBar sera référencé comme étant Bar\FooBar;
Pour utiliser la classe Bar\FooBar, il faudra l'inclure.
Cependant, il existe un moyen d'autocharger les classes à l'aide des Namespaces, c'est l'autoloading.
Il existe plusieurs normes d'autoloading en php suivant les principes PSR (PHP Standards Recommandation) https://www.php-fig.org/psr/ .
La première norme d'auto-chargement des classes était le PSR-0 qui est maintenant déprecié au profit du PSR-4.
Le but du PSR-4 est de normer tes namespaces comme ton architecture de dossiers :
- racine : namespace Racine;
- Dossier namespace Racine\Dossier;
- Fichier.php namepsace Racine\Dossier; class Fichier{}
qui te permettra d'appeler ta classe fichier de la manière suivante :
use Racine\Dossier\Fichier;
$fichier = new Fichier();
Le but étant de bien mapper ta racine (ex : on map le dossier app avec le namespace MonApp).
- app namespace MonApp;
- dossier namespace MonApp\Dossier;
Pour utiliser le PSR-4 tu as plusieurs possiblités mais la plus simple est d'utiliser Composer.
Voici un exemple en Anglais : https://experiencehq.net/blog/how-and-when-to-use-psr-4-autoloading-in-your-craft-plugins
Il faut simplement télécharger composer.phar sur https://getcomposer.org/ tu place le fichier à la racine de ton projet, il faut aussi avoir PHP en ligne de commande.
Tu dois seulement faire à l'aide d'un invite de commande :
php composer.phar init
Suivre les instructions, ouvrir un fichier générer nommé composer.json et y ajouter simplement ce qui est dit au dessus.
(en gros on ajoute un index autoload, on précise le type d'autoloading (psr-4) ,
ensuite on indique que le namespace "MonNamespace\\" mappera le dossier "dossier")
une fois tout cela crée, il suffit de faire :
composer dump-autoload
Voila, j'espère t'avoir éclairé.
Bonsoir, merci de votre réponse,
En réalité je ne comprend pas trop l'utilité de composer car j'ai créé une classe "Autoloader" avec les fonction "autoload" et "register" cette dernière appelant "spl_autoload_register(array(_CLASS__,"autoload")), c'est magique et ça a l'air de fonctionner, mais je rencontre un problème différent maintenant. Pouvez vous me dire si votre explication est la solution au problème que je rencontre?
La classe:
l'erreure:
Fatal error: Class 'Core\Controller\MainController' not found in C:\wamp\www\test\app\Controller\AppCtrl.php on line 7
et le pire c'est que l'arborescence décrite ds l’erreur est tout a fais correcte, c'est a s’arracher les cheveux pour un débutant comme moi.
Est-ce le problème de "composer" que vous décrivez?
merci de votre aide
En réalité je ne comprend pas trop l'utilité de composer car j'ai créé une classe "Autoloader" avec les fonction "autoload" et "register" cette dernière appelant "spl_autoload_register(array(_CLASS__,"autoload")), c'est magique et ça a l'air de fonctionner, mais je rencontre un problème différent maintenant. Pouvez vous me dire si votre explication est la solution au problème que je rencontre?
La classe:
namespace app\Controller;
use core\Controller\MainController;
class AppCtrl extends MainController{ /* ligne 7*/
...
}
l'erreure:
Fatal error: Class 'Core\Controller\MainController' not found in C:\wamp\www\test\app\Controller\AppCtrl.php on line 7
et le pire c'est que l'arborescence décrite ds l’erreur est tout a fais correcte, c'est a s’arracher les cheveux pour un débutant comme moi.
Est-ce le problème de "composer" que vous décrivez?
merci de votre aide