Nasıl bir dizinden () Tüm PHP dosyaları dahil etmek?

8 Cevap php

Çok hızlı n00b soru, PHP Ben komut dosyaları bir dizin içerebilir.

yani yerine:

include('classes/Class1.php');
include('classes/Class2.php');

gibi bir şey var:

include('classes/*');

Belirli bir sınıf için yaklaşık 10 alt sınıfların bir toplama dahil iyi bir yol bulmak için görünmüyor olabilir.

8 Cevap

Burada PHP 5 çeşitli klasörlerden sınıfların çok yer yoludur. Olsa sınıfları varsa bu sadece çalışacak.

/*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 Karsten kodunun sadece bir değişiklik

function include_all_php($folder){
    foreach (glob("{$folder}/*.php") as $filename)
    {
        include $filename;
    }
}

include_all_php("my_classes");

Eğer php 5 kullanıyorsanız, bunun yerine autoload kullanmak isteyebilirsiniz.

Sen kullanabilirsiniz set_include_path:

set_include_path('classes/');

http://php.net/manual/en/function.set-include-path.php

Ben bunun yerine __ autoload kullanmak ... Bu eski bir yazı olduğunu fark ANCAK ... SİZİN SINIFLARINDA DAHİL YAPMAYIN

function __autoload($class_name) {
    require_once('classes/'.$class_name.'.class.php');
}

$user = new User();

Sonra henüz php irade, otomatik yangın __ autoload dahil edilmemiş yeni bir sınıf aramak ve sizin için bunu dahil her

Ben bir readdir() fonksiyonu ve daha sonra döngü kullanmak ve dosyaları (o sayfadaki 1 örneğe bakın) dahil öneririz.

Sizin kullanabileceğiniz bir defada sınıfı tanımlamak zorunda kalmadan sınıfları bir demet eklemek isteyen varsa:

$directorys = array(
            'system/',
            'system/db/',
            'system/common/'
);
foreach ($directorys as $directory)
   {
      foreach(glob($directory . "*.php") as $class)
        {
        include_once $class;
        }
}

"= Yeni thisclass $ thisclass ();" Bu yol sadece sınıfını içeren php dosyasında sınıfını tanımlamak ve değil bütün bir liste olabilir

Tüm dosyaları nasıl işleyeceğini iyi gelince? Im değil bu ile hafif bir hız azalma olabilir emin olun.

Bir dizindeki dosyaları dahil etmek için hiçbir yazacaktı bir işlev () yapmak. Sen değişken kapsamları kaybedebilir ve "küresel" kullanmak zorunda kalabilirsiniz. Dosyalar sadece döngü.

Henüz dahil değildir - bir de dahil dosya diğer dosya tanımlanan diğer sınıfa uzatacak bir sınıf adı var olduğunda da, zorluklar içine çalıştırabilirsiniz. Yani, dikkatli olun.