spl_autoload_register()
PHP'nin bir yığın / kuyruğa koyacağı ve "yeni Sınıf" bildirildiğinde sırayla çağıracağı birden çok işlevi (veya kendi Autoload sınıfınızdan statik yöntemleri) kaydetmenize olanak tanır.
Yani mesela:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
Yukarıdaki örnekte, "Sınıfım" örneklemeye çalıştığınız sınıfın adıdır, PHP bu adı bir dize olarak geçirir spl_autoload_register()
, bu da değişkeni alıp uygun sınıfı / dosyayı "dahil etmek" için kullanmanızı sağlar . Sonuç olarak, bu sınıfı bir include / requir deyimi aracılığıyla eklemeniz gerekmez ...
Sadece yukarıdaki örnekte olduğu gibi somutlaştırmak istediğiniz sınıfı arayın ve spl_autoload_register()
tüm sınıfınızın nerede olduğunu anlayacak olan kendi fonksiyonunuzu (üzerinden ) kaydettiğiniz için PHP bu fonksiyonu kullanacaktır.
Kullanmanın faydası spl_autoload_register()
aksine olmasıdır __autoload()
her dosyasında bir özdevinimli_yükle işlevi uygulamak gerekmez oluşturup buna. spl_autoload_register()
ayrıca otomatik yüklemeyi hızlandırmak ve daha da kolaylaştırmak için birden fazla otomatik yükleme işlevini kaydetmenizi sağlar.
Misal:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
Spl_autoload ile ilgili olarak , el kitabı şunları belirtir:
Bu işlev, için varsayılan bir uygulama olarak kullanılmak üzere tasarlanmıştır __autoload()
. Başka bir şey belirtilmezse ve spl_autoload_register()
herhangi bir parametre olmadan çağrılırsa, bu işlev daha sonraki çağrılar için kullanılacaktır __autoload()
.
Daha pratik terimlerle, tüm dosyalarınız tek bir dizinde bulunuyorsa ve uygulamanızda yalnızca .php dosyaları değil, örneğin .inc uzantılı özel yapılandırma dosyaları kullanılıyorsa, kullanabileceğiniz bir strateji, dizininizi içeren PHP dosyalarına yol (yoluyla set_include_path()
) içerir.
Ayrıca yapılandırma dosyalarınıza da ihtiyaç duyduğunuzdan spl_autoload_extensions()
PHP'nin aramasını istediğiniz uzantıları listelemek için kullanabilirsiniz .
Misal:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Spl_autoload, __autoload()
sihirli yöntemin varsayılan uygulaması olduğundan, yeni bir sınıf oluşturmaya çalıştığınızda PHP spl_autoload'u çağırır.
Bu yardımcı olur umarım...