有沒有辦法在PHP中的函數內部訪問一個類的實例?就像這樣:全局PHP類的函數?
include("class.php");
$bla=new Classname();
function aaa(){
$bla->DoSomething(); //Doesn't work.
}
$bla->DoSomething(); //Works.
有沒有辦法在PHP中的函數內部訪問一個類的實例?就像這樣:全局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();
}
這是最直接的解決方案,將至少讓你稍微耦合的代碼工作,直到更優雅的代碼編寫。 – grantwparks 2011-08-07 19:45:21
如果您希望在整個應用程序中只使用一個類的單個實例,則應該使用單例而不是全局。你可以這樣做:
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();
}
鏈接中斷 – NaveenDA 2017-10-27 15:18:50
更簡潔的方法是通過引用給定的類傳遞實例,然後訪問它。
另一種方法是使用單例模式,儘管許多人認爲它並不比全局模式更好。
正如已經回答的那樣,您可以使用global variable來存儲類實例,但在我看來,您應該考慮使用諸如Singleton pattern之類的東西來代替更清晰的實現。
你可以找到一個簡單的單例類here的例子。
但如果他想要該類的多個實例呢?這裏不需要單身。 – GSto 2010-02-11 20:35:43
再次閱讀他的問題。他特別詢問「有沒有辦法在php中的函數內部訪問一個類的實例」 – wimvds 2010-02-11 20:38:43
而且就像我已經在答案中所說的那樣,只是一個小的鏈接,你應該遵循並自己決定,如果單例實際上是正確的: http://code.google.com/p/google-singleton-detector/wiki/WhySingletonsAreControversial – tDo 2010-02-11 20:46:45