函数中的全局PHP类?

函数中的全局PHP类?,php,class,function,global,Php,Class,Function,Global,有没有一种方法可以访问PHP函数中类的一个实例?像这样: include("class.php"); $bla=new Classname(); function aaa(){ $bla->DoSomething(); //Doesn't work. } $bla->DoSomething(); //Works. 使用: 适用于所有变量,而不仅仅是类。如果您希望在整个应用程序中仅使用类的单个实例,则应使用单实例,而不是全局实例。你可以这样做: class Class

有没有一种方法可以访问PHP函数中类的一个实例?像这样:

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

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

$bla->DoSomething();  //Works.
使用:


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

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

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

更干净的方法是通过引用将实例传递给给定的类,然后访问它


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

已经回答过,可以用A来存储类实例,但听起来好像应该考虑使用类似的东西来实现更清洁的实现。


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

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

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

但如果他想拥有该类的多个实例呢?单身汉在这里是不必要的。再读一遍他的问题。他特别问“是否有一种方法可以访问php函数中类的一个实例”,正如我在回答中已经说过的,只是一个小链接,你应该遵循它,自己决定singleton是否是正确的方法:True,事实上,他应该首先考虑所有的选择,并决定是否应该采用单一模式,但这项工作将留给问题的海报。这不是我能为他做出的决定……这是最直接的解决方案,至少会让您的稍微耦合的代码工作,直到编写出更优雅的代码
function xxx() {
    Singleton::getInstance()->DoSomething();
}