函数中的全局PHP类?

时间:2010-02-11 20:05:22

标签: php class function global

有没有办法在PHP中的函数内访问一个类的实例?像这样:

include("class.php");
$bla=new Classname();

function aaa(){
    $bla->DoSomething();  //Doesn't work.
}

$bla->DoSomething();  //Works.

5 个答案:

答案 0 :(得分:6)

使用global

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

适用于所有变量,而不仅仅是类。

答案 1 :(得分:5)

如果我正确地解释了你的问题,那么正确的方法是创建一个单例类。

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() {
        ...
    }
}

你可以在你的函数中调用它,如下所示:

function xxx() {
    Singleton::getInstance()->DoSomething();
}

答案 2 :(得分:2)

更简洁的方法是通过引用传递实例给定的类,然后访问它。

另一种方法是使用单身模式,尽管许多人认为它并不比全球模式更好。

答案 3 :(得分:1)

如果要在整个应用程序中仅强制使用类的单个实例,则应使用单例,而不是全局。你可以这样做:

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

答案 4 :(得分:1)

正如已经回答的那样,您可以使用global variable来存储类实例,但听起来我应该考虑使用类似Singleton pattern的内容来代替更清晰的实现。

您可以找到单个类here的简单示例。