Benim uygulamalar Ben genellikle tüm çekirdek sınıfları (yani çerçeve ve beraberindeki kütüphaneler) içerir setup.php
dosyası var. Benim özel sınıflar dizin düzeni harita ile destekli autoloader kullanılarak yüklenir.
Yeni bir sınıf eklenir her zaman ben o değerler olarak tuşları ve yolları gibi sınıf isimleri ile ilişkisel dizi oluşturur modeli sınıfları için arama bütün dizin ağacı tarar komut satırı oluşturucu komut dosyasını çalıştırın. Sonra, __ autoload işlevi o diziye sınıf adını arar ve yolunu içerir alır. İşte kod:
autobuild.php
define('MAP', 'var/cache/autoload.map');
error_reporting(E_ALL);
require 'setup.php';
print(buildAutoloaderMap() . " classes mapped\n");
function buildAutoloaderMap() {
$dirs = array('lib', 'view', 'model');
$cache = array();
$n = 0;
foreach ($dirs as $dir) {
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $entry) {
$fn = $entry->getFilename();
if (!preg_match('/\.class\.php$/', $fn))
continue;
$c = str_replace('.class.php', '', $fn);
if (!class_exists($c)) {
$cache[$c] = ($pn = $entry->getPathname());
++$n;
}
}
}
ksort($cache);
file_put_contents(MAP, serialize($cache));
return $n;
}
autoload.php
define('MAP', 'var/cache/autoload.map');
function __autoload($className) {
static $map;
$map or ($map = unserialize(file_get_contents(MAP)));
$fn = array_key_exists($className, $map) ? $map[$className] : null;
if ($fn and file_exists($fn)) {
include $fn;
unset($map[$className]);
}
}
Bu dosya adlandırma kuralı [class_name]. Class.php olması gerekir. Sınıfları autobuild.php
baktım olacak dizinleri değiştirmek. Sınıf bulunamadı zaman da özdevinimli_yükle fonksiyonundan autobuilder çalıştırabilirsiniz, ama bu sonsuz döngü içine programı alabilirsiniz.
Tefrika diziler lanetlemek hızlı.
@ JasonMichael: PHP 4 ölü. Bunun üzerine alın.