2011-11-06 9 views
2

ma convention de nommage des classes: class.ClassName.phpphp aide spl_autoload_register ... tout simplement pas comprendre

ma convention de nommage de fichier de classe: class.classname.php (d'où le strtolower).

les fichiers de classe sont situés dans le chemin d'accès comprennent:/home/content/XX/XXXXX/html/projets/include/

//autoload.php 
<?php 
    class Autoload { 
     public static function autoloadClasses($className) { 
      $className = strtolower($className); 
      $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'include/class.' . $className. '.php'; 
      require_once($file); 
     } 
    } 
    $register = spl_autoload_register('Autoload::autoloadClasses'); 
?> 

//check4.php 
<?php 
    $company = $s->company; 
    $projectName = 'development'; 
    $items = array('type', 'scope', 'table', 'conditions'); 
    $things = array('select', '*', 'todos', array('company'=>$company, PROJECT_NAME=>$projectName)); 
    $combinedArray = array_combine($items, $things); 
    $q = new Query($combinedArray); 
?> 

verified classes exist and are included http://technicheian.com/images/includedClasses.png

sur chaque page qui utilise une classe (par exemple, celui-ci appelant Query; situé class.query.php:

05-Nov-2011 20:18:30]PHP Fatal error: Class 'Query' not found in /home/content/XX/XXXXXX/html/projects/check4.php sur la ligne 9

à la fin de class.session.php est $s = new Session (noté ici pour dire que la variable $ company ne doit pas être vide).

J'ai lu à peu près tous les articles, comment, etc. Je peux trouver. Qu'est-ce que je rate?

php 5.2 en cours d'exécution

+0

Supprimez le bit 'set_include_path' - vous ne l'utilisez pas ici. De plus, avez-vous vérifié que votre classe existe dans le fichier '{AutoloaderClassDir}/include/class. {ClassName} .php' en prenant en compte les noms en majuscules? – adlawson

+0

Merci pour la réponse. mis à jour mon code (et post). Habituellement, ces types de changements ne sont pas très compliqués ou difficiles à mettre en œuvre. Cependant, j'ai édité presque tout mon code autour de la facilité d'utilisation de cette fonctionnalité tant désirée. Tout ce que j'ai lu en faisant des recherches a fait apparaître cette implémentation triviale ("vous ajoutez simplement cet extrait de code et vous êtes bon"). L'autochargeur étant un peu un routeur, la majorité de mon application casse (évidemment) sans avoir accès aux classes. –

+0

Pourquoi les gens continuent de réinventer la roue? Jetez un oeil à Zend_Loader_Autoloader (http://framework.zend.com/manual/en/zend.loader.autoloader.html) –

Répondre

1

supprimer le contrôle file_exists et regarder vos journaux d'erreurs. Vous verrez le fichier que vous avez essayé d'exiger. Je pense qu'il peut y avoir confusion sur ce que fait __FILE__ (parce qu'il fonctionne sur le fichier autoload.php).

Modifier: Il ressemble à ce

dirname(__FILE__) . DIRECTORY_SEPARATOR . 'include/class.'

devrait être remplacé

/home/content/XX/XXXXXX/html/projects/include/class.

Il y a un certain nombre de choses pour vous de vérifier que le chargement automatique fonctionne:

  1. Pour que votre chargement automatique personnalisé soit actif, il doit être enregistré. Donc le spl_autoload_register('Autoload::autoloadClasses') doit être exécuté. Une bonne méthode consiste à éditer php.ini et à définir le fichier auto_prepend pour appeler votre fichier de chargement automatique.
  2. Votre code de chargement automatique doit ensuite trouver le bon fichier avec l'extension correcte (en respectant éventuellement la priorité php include_path que vous voulez).
+0

Oui, bonne prise. Comme alternative qui pourrait être laissée dans le code si elle est faite correctement, en cas d'échec, consignez le nom de fichier que vous essayez d'ouvrir. – stefgosselin

+0

@Paul: thx. mise à jour post pour refléter les changements. le journal des erreurs produit la même chose que la sortie d'erreur du navigateur: 05-Nov-2011 20:18:30] PHP Erreur fatale: La classe 'Query' est introuvable dans /home/content/XX/XXXXXX/html/projects/check4.php on ligne 9 à la fin de la classe.session.php est $ s = nouvelle session; code sur check4.php: société; \t $ projectName = 'développement'; \t $ items = array ('type', 'scope', 'table', 'conditions'); \t $ things = array ('select', '*', 'todos', array ('compagnie' => $ compagnie, PROJECT_NAME => $ nomProjet)); \t $ combinedArray = array_combine ($ items, $ choses); $ q = nouvelle requête ($ combinedArray); ?> –

+0

@tchnchn Le message du journal des erreurs n'a pas 'include' dans le chemin d'accès. En outre, êtes-vous sûr que votre chargeur automatique est en cours d'exécution. Vous pouvez vérifier en mettant une déclaration d'écho dedans. – Paul

Questions connexes