Nesne-yönelimli uygulama yazan birçok geliştirici, her bir sınıf tanımı için ayrı bir PHP kaynak dosyası oluşturmaktadır. Bu kullanımın en can sıkıcı noktalarından bir tanesi, betiklerin en tepesinde bir sürü dosyanın betiğe dahil edilmesini gerektirmesidir (her bir sınıf için ayrı bir dosya).
spl_autoload_register() işlevi, henüz tanımlanmamışlarsa, sınıfların ve arayüzlerin otomatik olarak yüklenmesini sağlayacak sayıda otomatik yükleyiciyi kaydeder. Otomatik yükleyicileri kaydederek, bir hatayla başarısızlığa uğramadan önce PHP'ye sınıf veya arayüzü yüklemek için son bir şans verilir.
PHP 8.0.0 öncesinde sınıf ve arayüzleri otomatik yüklemek için __autoload() işlevini kullanmak mümkündü. Bununla birlikte, __autoload() işlevi spl_autoload_register() işlevinin daha az esnek benzeridir ve __autoload() işlevinin kullanılması PHP 7.2.0 itibariyle önerilmemekte olup PHP 8.0.0 itibariyle kullanımdan kaldırılmıştır.
Kurucu benzeri her sınıf aynı yolla otomatik yüklenebilir. Buna sınıflar, arayüzler, nitelikler ve sayılamalar dahildir.
Bilginize:
spl_autoload_register(), birden çok otomatik yükleyiciyi kaydetmek için bir çok kez çağrılabilir. Ancak bir otomatik yükleme işlevinden bir istisna yavrulanması, bu işlemi kesintiye uğratır ve diğer otomatik yükleme işlevleri çalışamaz. Bu nedenle, bir otomatik yükleme işlevinden istisna yavrulanması kesinlikle önerilmez.
Örnek 1 - Otomatik yükleme örneği
Bu örnek MyClass1
ve MyClass2
sınıflarını yüklemeye çalışmaktadır. Sınıflar aynı isimli MyClass1.php ve MyClass2.php dosyalarının içinde yer almaktadırlar.
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Örnek 2 - Başka bir otomatik yükleme örneği
Bu örnek DenemeA
arayüzünü yüklemeye çalışır.
<?php
spl_autoload_register(function ($name) {
var_dump($isim);
});
class Fan implements DenemeA {
}
?>