Yanıtlar:
foreach (glob("classes/*.php") as $filename)
{
include $filename;
}
get_include_path()
hala yükleme sırasını otomatik olarak belirleyemiyor (temel sınıf genişletilmiş sınıftan SONRA yüklenebilir, sonuçta oluşan hatalar)
İşte PHP 5 çeşitli klasörlerden sınıflar çok dahil yoludur. Bu sadece sınıfları olsa çalışır.
/*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;
}
}
}
Bu eski bir yazı olduğunu anlıyorum AMA ... SINIFLARINIZI DAHİL ETMEYİN ... bunun yerine __autoload kullanın
function __autoload($class_name) {
require_once('classes/'.$class_name.'.class.php');
}
$user = new User();
Sonra henüz dahil edilmemiş yeni bir sınıf aradığınızda php __autoload otomatik ateş ve sizin için dahil
Eğer php 5 kullanıyorsanız, bunun yerine otomatik yüklemeyi kullanmak isteyebilirsiniz .
bu sadece Karsten kodunun bir modifikasyonu
function include_all_php($folder){
foreach (glob("{$folder}/*.php") as $filename)
{
include $filename;
}
}
include_all_php("my_classes");
2017'de nasıl yapılır:
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
} );
Burada PHP belgeleri tarafından önerilir: Otomatik yükleme sınıfları
autoload
sadece birisi henüz yüklenmemiş olan sınıfın nesnesini yaratmaya çalıştığında devreye girecektir.
Set_include_path komutunu kullanabilirsiniz :
set_include_path('classes/');
classes/
kullanırken include
/require
Hepsini bir dizine VE alt dizinlerine dahil etmek istiyorsanız:
$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;
}
Dosyalarınızı dahil etmek için alfabetik sıra kullanacağını unutmayın.
The entries are returned in the order in which they are stored by the filesystem.
- php.net/manual/en/function.readdir.php
Her sınıfı bir kerede tanımlamak zorunda kalmadan bir grup sınıf eklemek istiyorsanız şunları kullanabilirsiniz:
$directories = array(
'system/',
'system/db/',
'system/common/'
);
foreach ($directories as $directory) {
foreach(glob($directory . "*.php") as $class) {
include_once $class;
}
}
Bu şekilde sadece sınıfı içeren php dosyasındaki sınıfı tanımlayabilir, $thisclass = new thisclass();
Tüm dosyaları ne kadar iyi işler? Bununla hafif bir hız düşüşü olabileceğinden emin değilim.
Dosyalar arasında HİÇBİR bağımlılık yoksa ... TÜM alt dizinlerde TÜM php dosyalarını dahil etmek için yinelenen bir işlev var:
$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");
}
Ben bir readdir () işlevi kullanmak ve daha sonra döngü ve dosyaları dahil öneririz ( o sayfada 1. örneğe bakın).
Dizine dosya eklemek için bir işlev () yazmayın. Değişken kapsamlarını kaybedebilirsiniz ve "global" kullanmak zorunda kalabilirsiniz. Sadece dosyalar üzerinde döngü.
Ayrıca, dahil edilen bir dosya, diğer dosyada tanımlanan ve henüz dahil edilmeyen diğer sınıfa genişleyecek bir sınıf adına sahip olduğunda zorluklarla karşılaşabilirsiniz. Yani dikkatli ol.