Respostas:
foreach (glob("classes/*.php") as $filename)
{
include $filename;
}
get_include_path()
ainda não pode auto determinar a ordem de carregamento (classe de base pode ser carregado depois classe estendida, erros resultante)
Aqui está a maneira como incluo muitas classes de várias pastas no PHP 5. Isso só funcionará se você tiver aulas.
/*Directories that contain classes*/
$classesDir = array (
ROOT_DIR.'classes/',
ROOT_DIR.'firephp/',
ROOT_DIR.'includes/'
);
function __autoload($class_name) {
global $classesDir;
foreach ($classesDir as $directory) {
if (file_exists($directory . $class_name . '.php')) {
require_once ($directory . $class_name . '.php');
return;
}
}
}
Sei que este é um post antigo, MAS ... NÃO INCLUI SUAS AULAS ... Em vez disso, use __autoload
function __autoload($class_name) {
require_once('classes/'.$class_name.'.class.php');
}
$user = new User();
Então, sempre que você chamar uma nova classe que ainda não foi incluída, o php disparará __autoload automaticamente e incluirá para você
Se você estiver usando o php 5, poderá usar o carregamento automático .
isso é apenas uma modificação do código de Karsten
function include_all_php($folder){
foreach (glob("{$folder}/*.php") as $filename)
{
include $filename;
}
}
include_all_php("my_classes");
Como fazer isso em 2017:
spl_autoload_register( function ($class_name) {
$CLASSES_DIR = __DIR__ . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR; // or whatever your directory is
$file = $CLASSES_DIR . $class_name . '.php';
if( file_exists( $file ) ) include $file; // only include if file exists, otherwise we might enter some conflicts with other pieces of code which are also using the spl_autoload_register function
} );
Recomendado pela documentação do PHP aqui: Carregamento automático de classes
autoload
entrará em jogo somente quando alguém tentar, ou seja, criar um objeto da classe que ainda não foi carregado.
Você pode usar set_include_path :
set_include_path('classes/');
classes/
ao usar include
/require
Se você deseja incluir tudo em um diretório E seus subdiretórios:
$dir = "classes/";
$dh = opendir($dir);
$dir_list = array($dir);
while (false !== ($filename = readdir($dh))) {
if($filename!="."&&$filename!=".."&&is_dir($dir.$filename))
array_push($dir_list, $dir.$filename."/");
}
foreach ($dir_list as $dir) {
foreach (glob($dir."*.php") as $filename)
require_once $filename;
}
Não esqueça que ele usará a ordem alfabética para incluir seus arquivos.
The entries are returned in the order in which they are stored by the filesystem.
- php.net/manual/en/function.readdir.php
Se você deseja incluir várias classes sem precisar definir cada classe de uma vez, você pode usar:
$directories = array(
'system/',
'system/db/',
'system/common/'
);
foreach ($directories as $directory) {
foreach(glob($directory . "*.php") as $class) {
include_once $class;
}
}
Dessa forma, você pode apenas definir a classe no arquivo php que contém a classe e não uma lista completa de $thisclass = new thisclass();
Quanto ao quão bem ele lida com todos os arquivos? Não tenho certeza se pode haver uma ligeira diminuição de velocidade com isso.
Se NÃO houver dependências entre arquivos ... aqui está uma função recursiva para incluir todos os arquivos php em todos os subdiretórios:
$paths = array();
function include_recursive( $path, $debug=false){
foreach( glob( "$path/*") as $filename){
if( strpos( $filename, '.php') !== FALSE){
# php files:
include_once $filename;
if( $debug) echo "<!-- included: $filename -->\n";
} else { # dirs
$paths[] = $filename;
}
}
# Time to process the dirs:
for( $i=count($paths)-1; $i>0; $i--){
$path = $paths[$i];
unset( $paths[$i]);
include_recursive( $path);
}
}
include_recursive( "tree_to_include");
# or... to view debug in page source:
include_recursive( "tree_to_include", 'debug');
<?php
//Loading all php files into of functions/ folder
$folder = "./functions/";
$files = glob($folder."*.php"); // return array files
foreach($files as $phpFile){
require_once("$phpFile");
}
Sugiro que você use uma função readdir () e faça um loop e inclua os arquivos (veja o 1º exemplo nessa página).
Não escreva uma função () para incluir arquivos em um diretório. Você pode perder os escopos variáveis e pode ter que usar "global". Apenas faça um loop nos arquivos.
Além disso, você pode ter dificuldades quando um arquivo incluído possui um nome de classe que será estendido para a outra classe definida no outro arquivo - que ainda não está incluído. Por isso tem cuidado.