[英]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();
}
更簡潔的方法是通過引用傳遞實例給定的類,然后訪問它。
另一種方法是使用單例模式,盡管許多人認為它並不比全局模式更好。
如果要在整個應用程序中僅強制使用類的單個實例,則應使用單例,而不是全局。 你可以這樣做:
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.