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(); //Doesn't work.
}
$bla->DoSomething(); //Works.
Use global:
function aaa() {
global $bla;
$bla->DoSomething();
}
Works on all variables, not just classes.
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();
}
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.
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();
}
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.