2009-11-24 16 views
7

Me enteré de la función set_include_path(). Durante todo este tiempo, que define una constante en el archivo config.phpdefino mi propia BASE_PATH vs. set_include_path?

define('BASE_PATH', '/var/www/mywebsite/public_html/'); 

Y en todos los archivos php posteriores, que incluiría al igual que

include(BASE_PATH.'header.php'); 
include(BASE_PATH.'class/cls.data_access_object.php'); 

¿Hay alguna ventaja con el enfoque constante vs. el enfoque set_include_path y viceversa? ¿El enfoque constante es obsoleto?

Respuesta

5

El uso de set_include_path() (o ini_set ('include_path', ...)) le permite especificar varias carpetas que contendrán su código de biblioteca. Por ejemplo, si su aplicación se basa en una variedad de marcos/bibliotecas diferentes, p. PEAR y Zend FW, es posible que tenga algo así como,

ini_set ('include_path', '/ usr/local/php/pear:/usr/local/php/zendfw');

La desventaja de este enfoque es que usará cualquier archivo que encuentre primero; si tiene un archivo llamado "Mailer.php" en más de una de sus rutas de inclusión, incluirá el primero que encuentre, causando errores sutiles si esa no es su intención. Una buena organización de código generalmente resuelve ese problema. Además, include_path recorre el caché de realpath (http://us2.php.net/realpath), que a veces debe modificarse para obtener un mejor rendimiento en función de su configuración.

Ambas maneras están bien, sin embargo, usar el método define() es más explícito.

FWIW, generalmente uso ini_set ('include_path', ...).

4

Creo que la explicación de Micahel es muy clara.

Le recomendé que utilice "set_include_path" cuando almacene todos sus archivos PHP en una carpeta, por ejemplo: "libs /" (es más fácil). El uso del método define() debe ser más rápido ya que se especifica la ruta del archivo de forma explícita.

Siempre trate de evitar el uso de rutas absolutas a menos que sean realmente necesarias. me pareció muy útil para especificar sus caminos de esta manera:

define("BASE_PATH", dirname(__FILE__)); 

De esta manera se evitará tener que actualizar la ruta cada vez que se mueve el código.

+0

genial! Acabo de escuchar acerca de dirname() hace unos días también – John

Cuestiones relacionadas