开发者

PHP singleton class structure - Am I doing it right?

I have a really big script. It has a database class, a base class, a user authentication class, a resellers authentication class, paypal ipn class, a downloads class, and a plugins class

The Base class extends database class like this:

class Base extends database
{
    var $userid;
    var $root;
    var $config

    function Base($username, $password, $host, $database)
    {
        // Init DB
        $this -> database($hostname, $database, $username, $password);
        $this -> config = $this -> fetch(...);
        // and the code goes on
    }
    function anyFunction()
    {
        $this -> Downloads -> dloadFunction();
    }
}
class users extends Base
{
    var $userData;

    function users()
    {
        // initialize user, check if he is logged in, if he has cookies, load the user vars in $this -> userData
    }
    function userFunction1()
    {
        $this -> anyFunction();
    }
}
class resellers extends Base
{
    var $resellerData;

    function resellers()
    {
        // initialize resellers, check if he is logged in, if he has cookies, load the user vars in $this -> resellerData
    }
}
class IPN extends Base
{

}
class Downloads extends Base
{
    function dloadFunction()
    {

    }
}
class Plugins extends Downloads
{

}
?>

And I call my code like this :

<?php
    $Base = new Base($user, $pass, $host, $db);
    $user = new user();
    $Base -> user = $user;
    $reseller = new reseller();
    $Base -> reseller = $reseller;
    $downloads = new Downloads();
    $downloads -> Plugins = new Plugins();
    $Base -> Downloads = $downloads;

    $Base -> users -> updateEmail();
    // and the code goes on..
?>

I think the structure is really bad. 开发者_C百科Thats why I want to implement singleton method. how can I achieve this ?

Please help.


Example of singleton pattern realization in PHP (since 5.3):

/**
 * Singleton pattern implementation
 */
abstract class Singleton {

    /**
     * Collection of instances
     * @var array
     */
    private static $_aInstance = array();

    /**
     * Private constructor
     */
    private function __construct(){}

    /**
     * Get instance of class
     */
    public static function getInstance() {

    // Get name of current class
    $sClassName = get_called_class();

    // Create new instance if necessary
    if( !isset( self::$_aInstance[ $sClassName ] ) )
        self::$_aInstance[ $sClassName ] = new $sClassName();
        $oInstance = self::$_aInstance[ $sClassName ];

        return $oInstance;
    }

    /**
     * Private final clone method
     */
    final private function __clone(){}
}

Example of usage:

class Example extends Singleton {}
$oExample1 = Example::getInstance();
$oExample2 = Example::getInstance();
echo ( is_a( $oExample1, 'Example' ) && $oExample1 === $oExample2)
    ? 'Same' : 'Different', "\n"; 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜