کلاس‌‌ها و اشیا (PHP 5)
PHP Manual

ساختارها

ساختارها را می‌توان راه‌های عملی بهتر و طراحی خوب در نظر گرفت. آنها راه‌های منعطف برای مشکلات معمول برنامه‌نویسی ارائه می‌دهد.

کارخانه

ساختار کارخانه به شما امکان نمونه‌سازی از اشیا در زمان اجرا می‌دهد. به آن نمونه‌سازی کارخانه گفته می‌شود زیرا اشیا را تولید می‌نماید. یک کارخانه پارامتردار نام کلاس را به عنوان آرگومان خود دریافت می‌دارد.

Example #1 متد پارامتردار کارخانه

<?php
class Example
{
    
// The parameterized factory method
    
public static function factory($type)
    {
        if (include_once 
'Drivers/' $type '.php') {
            
$classname 'Driver_' $type;
            return new 
$classname;
        } else {
            throw new 
Exception('Driver not found');
        }
    }
}
?>

تعیین این متد در کلاس به درایور‌ها اجازه می‌دهد تا کلاس‌ها انتزاعی بسازند. اگر کلاس Example یک کلاس انتزاعی پایگاه داده باشد که یک درایورMySQL و SQLite را بارگذاری می‌نماید بصورت زیر است:

<?php
// Load a MySQL Driver
$mysql Example::factory('MySQL');

// Load a SQLite Driver
$sqlite Example::factory('SQLite');
?>

Singleton

ساختار Singleton برای مقعیت‌هایی است که تنها باید یک نمونه از کلاس وجود داشته باشد. نمونه معمول این موضوع اتصال پایگاه داده است. پیاده‌سازی این ساختار به برنامه‌نویس این امکان را می‌دهد تا یک نمونه را براحتی برای بقیه اشیا قابل دسترسی نماید.

Example #2 تابع Singleton

<?php
class Example
{
    
// Hold an instance of the class
    
private static $instance;
    
    
// A private constructor; prevents direct creation of object
    
private function __construct() 
    {
        echo 
'I am constructed';
    }

    
// The singleton method
    
public static function singleton() 
    {
        if (!isset(
self::$instance)) {
            
$c __CLASS__;
            
self::$instance = new $c;
        }

        return 
self::$instance;
    }
    
    
// Example method
    
public function bark()
    {
        echo 
'Woof!';
    }

    
// Prevent users to clone the instance
    
public function __clone()
    {
        
trigger_error('Clone is not allowed.'E_USER_ERROR);
    }

}

?>

این کد امکان دریافت یک نمونه از Example را مقدور می‌سازد.

<?php
// This would fail because the constructor is private
$test = new Example;

// This will always retrieve a single instance of the class
$test Example::singleton();
$test->bark();

// This will issue an E_USER_ERROR.
$test_clone = clone $test;

?>

کلاس‌‌ها و اشیا (PHP 5)
PHP Manual