2010-04-22 5 views
1

J'essaie de créer un objet PHP qui peut charger des objets dans d'autres fichiers à la demande en cas de besoin. Mon problème est que lorsque je référence les fichiers en fonction de l'emplacement du fichier pour la définition de classe, il ne peut pas trouver les fichiers. Donc fichier structure:Comment fonctionnent les références de fichiers dans un objet PHP?

/Test.php

/os/os.php (étend noyau)

/os/kernel.php

/os/libraries/lib1.php

/os/libraries/lib2.php

/os/libraries/lib3.php

En ke rnel.php, les bibliothèques sont référencées comme 'libraries/lib1.php'. Si je crée un objet "os" dans Test.php. Les fichiers lib ne sont pas trouvés.

Répondre

0

Utilisez une bonne convention de dénomination pour vos classes, include_path et spl_autoload.

Pour exemple:

Nom vos classes comme ceci: classe Os classe classe noyau Libraries_Lib1 ...

Enregistrez votre include_path

set_include_path(implode(PATH_SEPARATOR, array(
    realpath('os/'), 
    get_include_path(), 
))); 
spl_autoload_register("autoload"); 

et utilisation d'un chargement automatique:

function autoload($className) { 
    $name = implode("/", explode("_", $className)); 
    require_once(strtolower($name) . ".php"); 
} 
0

Je pense que si vous spécifiez un chemin relatif (plutôt qu'un nom de fichier ou un chemin absolu), PHP essaiera de l'inclure par rapport au $_SERVER['SCRIPT_FILENAME'] (le script principal qui a été exécuté) et donc vous obtenez des résultats incohérents.

Vous pouvez définir un chemin absolu, quelque part dans un fichier que vous savez sera toujours inclus, par exemple:

<?php 
//e.g. this could be file os/kernel.php 
//define absolute path to libraries dir 
define('LIBRARY_PATH', dirname(__FILE__) . '/libraries'); 

Et puis ailleurs (dans kernel.php et d'autres) utiliser lorsque vous incluez un autre fichier :

<?php 
include LIBRARY_PATH . '/lib1.php'; 
Questions connexes