Design a class that should always return a single object ?

Answer Posted / webguy

The answer is to use : The singleton pattern

Description:

Some application resources are exclusive in that there is
one and only one of this type of resource. For example, the
connection to a database through the database handle is
exclusive. You want to share the database handle in an
application because it's an overhead to keep opening and
closing connections, particularly during a single page fetch.

The singleton pattern covers this need. An object is a
singleton if the application can include one and only one of
that object at a time. The code in Listing 3 shows a
database connection singleton in PHP V5.

Ex: Singleton.php


<?php
require_once("DB.php");

class DatabaseConnection
{
public static function get()
{
static $db = null;
if ( $db == null )
$db = new DatabaseConnection();
return $db;
}

private $_handle = null;

private function __construct()
{
$dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );
}

public function handle()
{
return $this->_handle;
}
}

print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
?>


This code shows a single class called DatabaseConnection.
You can't create your own DatabaseConnection because the
constructor is private. But you can get the one and only one
DatabaseConnection object using the static get method. The
UML for this code is shown in Figure 3.

Figure 3. The database connection singleton
The database connection singleton

The proof in the pudding is that the database handle
returned by the handle method is the same between two calls.
You can see this by running the code on the command line.

% php singleton.php
Handle = Object id #3
Handle = Object id #3
%


The two handles returned are the same object. If you use the
database connection singleton across the application, you
reuse the same handle everywhere.

You could use a global variable to store the database
handle, but that approach only works for small applications.
In larger applications, avoid globals, and go with objects
and methods to get access to resources.

Is This Answer Correct ?    1 Yes 0 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

explain php variable length argument function.

585


Where sessions stored in PHP?

546


How can we access the data sent through the url with the get method?

600


What is the difference between laravel and php?

509


Tell me how to create a session? How to set a value in session? How to remove data from a session?

506






What is the purpose of the following files having extensions: frm, myd, and myi? What these files contain?

514


Does php support inheritance?

506


What is the importance of php?

528


What type of headers that PHP supports?

622


What does addslashes do in php?

542


Are static variables final?

528


which will print out the php call stack?

595


How to terminate the execution of a script in PHP?

574


How check variable is set or not in php?

461


What is basic php?

548