Hi,
is there a way to access one instance of a class inside functions in php? like this:
include("class.php");
$bla=new Classname();
function aaa(){
$bla->DoSomething(); //Doesnt Work
}
$bla->DoSomething(); //works.
thanks!
Hi,
is there a way to access one instance of a class inside functions in php? like this:
include("class.php");
$bla=new Classname();
function aaa(){
$bla->DoSomething(); //Doesnt Work
}
$bla->DoSomething(); //works.
thanks!
Use global:
function aaa() {
global $bla;
$bla->DoSomething();
}
Works on all variables, not just classes.
If you want to enforce using only a single instance of a class throughout your application, you should use a singleton, not a global. You could do something like this:
class Classname {
private static $instance;
private function __construct() {...}
public function doSomething() {...}
// The singleton method
public static function singleton() {
if ( !isset(self::$instance) ) {
self::$instance = new self;
}
return self::$instance;
}
private function __clone() { /* do nothing here*/ }
}
function aaa() {
Classname::getInstance()->doSomething();
}
See PHP Pattens for more implementation details.
The cleaner way would be to pass the instance by reference to the given class and then access it.
Another way would be to use a singleton pattern, though many argue that it's not really better than a global.
As already answered, you could use a global variable to store the class instance, but it sounds to me like you should consider using something like the Singleton pattern instead for a cleaner implementation.
You can find a simple example of a singleton class here.
If I interpret your question correctly, then the proper way to do this is create a singleton class.
class Singleton {
private static $instance;
private function __construct() {}
private function __clone() {}
public static function getInstance() {
if (!Singleton::$instance instanceof self) {
Singleton::$instance = new self();
}
return Singleton::$instance;
}
public function DoSomething() {
...
}
}
You would call this in your function as follows :
function xxx() {
Singleton::getInstance()->DoSomething();
}