Otomatik Yüklenen Sınıflar

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.

Dikkat

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() ve daha az esnek benzeri spl_autoload_register() işlevinin kullanılması PHP 7.2.0 itibariyle önerilmemekte olup PHP 8.0.0 itibariyle kullanımdan kaldırılmıştır.

Ö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 {
}

/*
string(5) "DenemeA"

Fatal error: Interface 'DenemeA' not found in ...
*/
?>

Örnek 3 - İstisnalı otomatik yükleme

Bu örnekte bir istisna yakalanmakta ve try/catch kullanımı gösterilmektedir.

<?php
spl_autoload_register
(function ($name) {
    echo 
"$name yüklenmek isteniyor.\n";
    throw new 
Exception("$name yüklenemedi.");
});

try {
    
$obj = new YüklenemezSınıf();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

Yukarıdaki örneğin çıktısı:

YüklenemezSınıf yüklenmek isteniyor.
YüklenemezSınıf yüklenemedi.

Örnek 4 - İstisnalı otomatik yükleme - Eksik özel istisna

Bu örnek, yüklenemeyen, özel bir istisna için bir istisna yavrular.

<?php
spl_autoload_register
(function ($name) {
    echo 
"$name yüklenmek isteniyor.\n";
    throw new 
Eksikİstisna("$name yüklenemedi.");
});

try {
    
$obj = new YülenemezSınıf();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

Yukarıdaki örneğin çıktısı:

YülenemezSınıf yüklenmek isteniyor.
Eksikİstisna yüklenmek isteniyor.

Fatal error: Class 'Eksikİstisna' not found in testMissingException.php on line 4