include() vs require() & require_once() vs include_once()
В php ф-ии include, require отвечают за вставку кода из одних файлов в другие. Ф-ии имеют одинаковый синтаксис:
include('file');
require('file');
include 'file';
require 'file';
Данные ф-ии производят вставку и выполнение кода из указанного файла, но имеют следующие различия в случаи ошибки(файл не найден):
require - Fatal error(E_COMPILE_ERROR), т.е останока скрипта
include - Warning error(E_WARNING) и продолжение выполнение сценария.
Если в настройках PHP указано отображение ошибок пользователь увидит данный ошибку и что хуже вашу структуру файлов.
Использование require более рационально в целях безопастности.
require_once и include_once отличаются:
Если код из файла уже один раз был включен, он не будет включен и выполнен повторно.
Например:
var_dump(include_once 'file.php'); // exec script
var_dump(include_once 'file.php'); // bool(true)
var_dump(require_once 'file.php'); // bool(true)
var_dump(require_once 'file.php'); // bool(true)
Выполнение файла кода в файле file.php произойдет только при первом запуске include_once. В остальных случаях ф-ия вернет true - файл уже подключен.
Что бы избежать ошибок используются относительные пути:
require(dirname(__FILE__).'/params.php');
//__FILE__ - абсолютный путь с разрешенными символическими ссылками
include_once(dirname(__FILE__) . '/database.class.php');
Так же можно проверить подключение файлов, например с определением константы:
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/config.php');
Для автоматической загрузки классов используются функция
spl_autoload_register().
Пример загруки с использованием ф-ии
function myAutoloader($className) {
$path = '/path/to/class/';
include $path.$className.'.php';
}
spl_autoload_register('myAutoloader');
$myClass = new MyClass();
Пример использования автозагрузки с использованием классов
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader {
public $path = '/path/to/class/';
public static function ClassLoader($className){
require $this->path . 'className.php';
}
public static function LibraryLoader($className) {
require $this->path . 'className.php';
}