Sınıflar ve Nesneler
PHP Manual

Hazır Yöntemler

Hazır yöntemler, en iyi uygulamaları ve doğru tasarımları açıklamanın bir yoludur. Hazır yöntemler genel programlama sorunlarına esnek bir çözüm getirir.

Üreteç Yöntemi

Üreteç yöntemi, nesnelerin çalışma anında örneklenmesini sağlar. Böyle adlandırılmasının sebebi, nesnenin "üretiminden" sorumlu olmasıdır. Üreteç yöntemi değiştirge olarak sınıf ismini alır ve onunla nesneyi oluşturur.

Örnek 1 Değiştirgeli Üreteç Yöntemi

<?php
class Örnek
{
    
// Değiştirgeli üreteç yöntemi
    
public static function üret($tür)
    {
        if (include_once 
'Drivers/' $tür '.php') {
            
$sınıfadı 'Driver_' $tür;
            return new 
$sınıfadı;
        } else {
            throw new 
Exception ('Sürücü bulunamadı');
        }
    }
}
?>

Bu yöntemi bir sınıf içinde tanımlarsanız sürücülerin çalışma anında yüklenmesini sağlayabilirsiniz. Örnek sınıfı bir veritabanı soyutlama sınıfı olsaydı, MySQL ve SQLite sürücülerinin yüklenmesi işlemi aşağıdaki gibi yapılabilirdi:

<?php
// MySQL sürücüsünü yükle
$mysql Örnek::üret('MySQL');

// SQLite sürücüsünü yükle
$sqlite Örnek::üret('SQLite');
?>

Tek Örnek Yöntemi

Tek örnek yöntemi, bir sınıfın tek bir örneğine ihtiyaç duyuldugu durumlarda tanımlanır. Bu duruma en genel örnek, veritabanı bağlantısıdır. Tek örnek yöntemi gerçeklenerek, tek bir nesne örneğinin başka birçok nesne tarafından erişilebilir olması sağlanabilir.

Örnek 2 - Tek Örnek İşlevi

<?php
class Örnek
{
    
// Sınıf örneğini bu değişkende saklayacağız
    
private static $nesneÖrneği;

    
// Private tanımlı bir kurucu,
    // nesnenin doğrudan oluşturulmasını engeller
    
private function __construct()
    {
        echo 
'Ben hazırım, ';
    }

    
// Tek örnek yöntemi
    
public static function tekÖrnek()
    {
        if (!isset(
self::$nesneÖrneği)) {
            
$c __CLASS__;
            
self::$nesneÖrneği = new $c;
        }

        return 
self::$nesneÖrneği;
    }

    
// Başka bir yöntem
    
public function bak()
    {
        echo 
'bak!';
    }

    
// Kullanıcıların örneği kopyalamasını engelle
    
public function __clone()
    {
        
trigger_error('Nesnenin kopyalanmasına izin verilmez.'E_USER_ERROR);
    }

}

?>

Yukarıdaki örnek Örnek sınıfının sadece tek bir örneğinin alınmasına izin verir.

<?php
// Bu işlem başarısız olur çünkü kurucu private tanımlı
$deneme = new Örnek;

// Bununla sınıfın daima tek örneği alınabilir
$deneme Örnek::tekÖrnek();
$deneme->bak();

// Bu bir E_USER_ERROR iletisi oluşturur.
$deneme_kopyası = clone($deneme);

?>

Sınıflar ve Nesneler
PHP Manual