"use" ne fonctionne pas
Fermé
shared
Messages postés
105
Date d'inscription
mercredi 24 mars 2010
Statut
Membre
Dernière intervention
23 mai 2016
-
19 mai 2016 à 15:19
shared Messages postés 105 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 23 mai 2016 - 23 mai 2016 à 22:21
shared Messages postés 105 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 23 mai 2016 - 23 mai 2016 à 22:21
A voir également:
- "use" ne fonctionne pas
- Use iphone as webcam - Guide
- Easy use data recovery - Télécharger - Récupération de données
- Remote mouse port is already in use ✓ - Forum Téléphones & tablettes Android
- You have an error in your sql syntax; check the manual that corresponds to your mariadb server version for the right syntax to use near ✓ - Forum MySQL
- Script net use - Forum Réseau
4 réponses
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
19 mai 2016 à 16:15
19 mai 2016 à 16:15
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
jubasse
Messages postés
24
Date d'inscription
mercredi 2 septembre 2015
Statut
Membre
Dernière intervention
11 octobre 2017
1
Modifié par jubasse le 20/05/2016 à 09:37
Modifié par jubasse le 20/05/2016 à 09:37
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é.
shared
Messages postés
105
Date d'inscription
mercredi 24 mars 2010
Statut
Membre
Dernière intervention
23 mai 2016
5
23 mai 2016 à 02:44
23 mai 2016 à 02:44
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
shared
Messages postés
105
Date d'inscription
mercredi 24 mars 2010
Statut
Membre
Dernière intervention
23 mai 2016
5
23 mai 2016 à 02:45
23 mai 2016 à 02:45
PS: j'utilise PhpStorm pour developer mon appli
shared
Messages postés
105
Date d'inscription
mercredi 24 mars 2010
Statut
Membre
Dernière intervention
23 mai 2016
5
23 mai 2016 à 22:21
23 mai 2016 à 22:21
j'ai installé composer, et cela ne change rien a mon soucis..
23 mai 2016 à 02:33