Static keyword is useful in creating Singleton design pattern because in such a scenario changes made by 1 object to a variable is reflected in all the objects of that class in that request.
Here is my example code with Singleton Design Pattern.
What I was trying to do is I was trying a singleton object over different request's and was trying to see whether it maintains its state or not. And it doesn't I tried running this page from different browser's and I failed to retrieve data of previous request's or session's.
Singleton Pattern is just needed so that only one object access at a time a resource to avoid conflict's
Singleton's are used to write log's and database access,maintain configuration variable's.
And that is when I realized the importance of an Application Server over a Web Server where we can create application object's.
Output is:
As you can see above is mine singleton class with a private constructor.I have 2 static methods one to store data and other to show data
In first case I have added user name as value and corresponding session id as key to the array.
I have called my method in 2 way's directly via class and by an object.
In the second call count goes 1
Finally I call show user in 2 way's and the 2 object's matches as per the condition
Here is my example code with Singleton Design Pattern.
What I was trying to do is I was trying a singleton object over different request's and was trying to see whether it maintains its state or not. And it doesn't I tried running this page from different browser's and I failed to retrieve data of previous request's or session's.
Singleton Pattern is just needed so that only one object access at a time a resource to avoid conflict's
Singleton's are used to write log's and database access,maintain configuration variable's.
And that is when I realized the importance of an Application Server over a Web Server where we can create application object's.
<?php
session_start();
//Singleton class example
error_reporting(E_ALL);
final class UserInfo
{
static $user=null;
static $instance=NULL;
public static function Instance()
{
if (self::$instance === null) {
self::$instance = new UserInfo();
}
return self::$instance;
}
/*
* Shows the array
*/
public static function showUser()
{
if(self::$user!=null)
{
foreach(self::$user as $key=>$value)
{
echo "<br/>Sessionid ".$key." is assigned to ".$value."<br/>";
}
}
}
/*
* Adds session Id and user to the array
*/
public static function AddUser()
{
echo "<br/>";
echo "Object count is ==>";
echo $ucount=count(self::$user);
echo "<br/>";
if(self::$user===null)
{
self::$user=array();
self::$user[session_id()]="User ".($ucount+1);
//print_r(self::$user);
}
else
{
if(!(array_key_exists(session_id(),self::$user)))
{
self::$user[session_id()]="User ".$ucount+1;
}
}
}
private function __construct()
{
}
}
echo "My Session Id is :". session_id();
UserInfo::Instance()->AddUser();
$fact1= UserInfo::Instance();
$fact= UserInfo::Instance();
$fact1->AddUser();
$fact->showUser();
UserInfo::Instance()->showUser();
if($fact1===$fact)
echo "Matches";
/*
* ERROR LINE
*/
//$fact3= new UserInfo();
?>
Output is:
My Session Id is :p15snn5ebgn52ftsj0eb43e4n0
Object count is ==>0
Object count is ==>1
Sessionid p15snn5ebgn52ftsj0eb43e4n0 is assigned to User 1
Sessionid p15snn5ebgn52ftsj0eb43e4n0 is assigned to User 1
Matches
As you can see above is mine singleton class with a private constructor.I have 2 static methods one to store data and other to show data
In first case I have added user name as value and corresponding session id as key to the array.
I have called my method in 2 way's directly via class and by an object.
In the second call count goes 1
Finally I call show user in 2 way's and the 2 object's matches as per the condition
No comments:
Post a Comment