Je suis nouveau avec cette chose namespace. J'ai 12 classes (fichiers séparés) dans mon répertoire de base, disons class1.php
et class2.php
dans un répertoire src/
.PHP classe introuvable lors de l'utilisation de l'espace de noms
class1.php
namespace \src\utility\Timer;
class Timer{
public static function somefunction(){
}
}
class2.php
namespace \src\utility\Verification;
use Timer;
class Verification{
Timer::somefunction();
}
Lorsque j'exécute class2.php
, je reçois l'erreur fatale qui
PHP Fatal error: Class 'Timer' not found in path/to/class2.php at line ***
Je lis quelque part sur ALORS , que j'ai besoin de créer Autoloaders pour cela. Si c'est le cas, comment puis-je m'y prendre pour en créer un, et sinon, alors quel est le problème?
MISE À JOUR
J'ai créé un chargeur automatique qui sera require
tous les fichiers requis sur le dessus de mon script php. Donc, maintenant le class2.php finirait comme ça.
namespace \src\utility\Verification;
require '/path/to/class1.php'
use Timer;
//or use src\utility\Timer ... both doesn't work.
class Verification{
Timer::somefunction();
}
Cela ne fonctionne pas non plus, et indique que cette classe est introuvable. Mais, si je supprime tous les namespaces
, et use
. Tout fonctionne bien.
Essayez dans votre classe2.php avec utilisation \ src \ Minuterie \ Minuterie comme minuterie; –
@ManinderpreetSingh Essayé. Même problème. –
Je pense que vous devriez vérifier [Composer] (http://getcomposer.org). Un espace de noms est simplement un identifiant unique pour une classe. Le chargement automatique de PHP est surchargé lorsqu'une classe est instanciée alors qu'elle n'existe pas mais avant que le pré-processeur ne lance une erreur T_FATAL. La pratique habituelle est de remplacer ensuite '\' par '/' et de le charger à partir d'une structure de dossiers (pourquoi l'espace de noms correspond généralement à une structure de répertoire) – ash