Tengo un par de preguntas sobre la ruta de inclusión en PHP e incluye archivos y/o clases.¿Por qué usar set_include_path() en PHP y cómo cargar automáticamente las clases desde diferentes carpetas?
A continuación se muestra un fragmento de código simple donde estamos configurando varias rutas de inclusión. Vi esto en otro proyecto, pero no estoy seguro de por qué?
Nunca he tenido que usar set_include_path() en ninguno de mis proyectos en los últimos 5 años más o menos.
Q1)
¿Qué es exactamente el propósito de establecer una ruta de inclusión? Siempre acabo de incluir el camino en mi llamada include().
Q2)
En el siguiente ejemplo se pone más de 1 camino. ¿Cómo funciona esto para incluir archivos en múltiples ubicaciones, estoy confundido sobre el propósito o lo que hace exactamente?
<?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)
Esta es la pregunta ligeramente diferente, pero todavía se relaciona con incluye. A continuación se muestra una función de autocarga automática para las clases. Solía tener una carpeta de clases y autocargar TODOS mis archivos de clase. En mi proyecto actual, tengo una biblioteca de clases para autocargar como lo hace a continuación, pero también tengo otra sección donde podría necesitar cargar automáticamente los archivos de clase desde un directorio de módulos.
Así que tendrá que cargar automáticamente mis clases de biblioteca situado en algún lugar como este ....
raíz/includes/biblioteca/clases/library_class_files.php
+++ +++ además
clases de carga para diferentes módulos (cuenta, mensajes, amigos, fotos, blogs, foros, etc.) ubicados en un lugar como este ....
root/modules/forums/modules_class_files.php
Puede que no necesite cargar archivos de clase de las 2 ubicaciones diferentes, pero si lo hago, ¿cómo voy a hacer eso?
<?php
//auto include class files that we need on a per page basis
function __autoload($class_name){
include('library/classes/' .$class_name . '.class.php');
}
?>