簡體   English   中英

函數中的全局PHP類?

[英]Global PHP class in functions?

有沒有辦法在PHP中的函數內訪問一個類的實例? 像這樣:

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

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

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

如果我正確地解釋了你的問題,那么正確的方法是創建一個單例類。

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

使用全局

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

適用於所有變量,而不僅僅是類。

更簡潔的方法是通過引用傳遞實例給定的類,然后訪問它。

另一種方法是使用單例模式,盡管許多人認為它並不比全局模式更好。

如果要在整個應用程序中僅強制使用類的單個實例,則應使用單例,而不是全局。 你可以這樣做:

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

正如已經回答的那樣,您可以使用全局變量來存儲類實例,但聽起來我應該考慮使用類似Singleton模式的東西來代替更清晰的實現。

你可以在這里找到一個單例類的簡單例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM