开发者

Global PHP class in functions?

开发者 https://www.devze.com 2022-12-20 02:29 出处:网络
Is there a way to access 开发者_如何学Goone instance of a class inside functions in PHP? Like this:

Is there a way to access 开发者_如何学Goone 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.


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();
}


Use global:

function aaa() {
    global $bla;
    $bla->DoSomething();
}

Works on all variables, not just classes.


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 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();
}
0

精彩评论

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