2011-01-26 11 views
7

Ho un paio di domande sul percorso di inclusione in PHP e compresi file e/o classi.Perché utilizzare set_include_path() in PHP e come caricare automaticamente le classi da cartelle diverse?

Di seguito è riportato un semplice snippet di codice in cui vengono impostati più percorsi di inclusione. Ho visto questo in un altro progetto, ma non sono sicuro del perché?

Non ho mai dovuto usare set_include_path() in nessuno dei miei progetti negli ultimi 5 anni circa.

Q1)
Che cosa è esattamente lo scopo di impostare un percorso di inclusione? Ho sempre incluso il percorso nella mia chiamata include().

Q2)
Nell'esempio sottostante imposta più di 1 percorso. In che modo funziona per includere file in più posizioni, sono confuso sullo scopo o su cosa fa esattamente?

<?php 
// Define App path 
define('APPLICATION_PATH', realpath('../')); 

// Build array of 3 different paths 
$paths = array(
    APPLICATION_PATH, 
    APPLICATION_PATH . '\com', 
    get_include_path() 
); 


/* 
Result of array above... 
Array 
(
    [0] => E:\Web Server\xampp\htdocs\test 
    [1] => E:\Web Server\xampp\htdocs\test\com 
    [2] => .;C:\php5\pear 
) 
*/ 

// Set include path from array above 
// http://us3.php.net/manual/en/function.set-include-path.php 
set_include_path(implode(PATH_SEPARATOR, $paths)); 

?> 

Q3)
Questo è domanda leggermente diversa ma riguarda ancora incluse. Di seguito è riportata una semplice funzione di caricamento automatico delle classi. Avevo una cartella delle classi e caricavo TUTTI i miei file di classe. Nel mio attuale progetto, ho una libreria di classi da caricare automaticamente come in basso, ma ho anche un'altra sezione in cui potrei aver bisogno di caricare automaticamente i file di classe da una directory di moduli.

Così ho bisogno di caricare automaticamente i miei classi della libreria trova un posto come questo ....

root/include/library/classes/library_class_files.php

+++ oltre +++

classi di carico per diversi moduli (account, messaggi, amici, foto, blog, forum, ecc) situati da qualche parte come questo ....

root/modules/forums/modules_class_files.php

Potrei non aver bisogno di caricare i file di classe dalle 2 diverse posizioni, ma se lo faccio, come potrei farlo?

<?php 
//auto include class files that we need on a per page basis 
function __autoload($class_name){ 
    include('library/classes/' .$class_name . '.class.php'); 
} 
?> 

risposta

Problemi correlati