【发布时间】:2011-01-15 21:11:53
【问题描述】:
有没有办法在 PHP 的函数中访问一个类的实例?像这样:
include("class.php");
$bla=new Classname();
function aaa(){
$bla->DoSomething(); //Doesn't work.
}
$bla->DoSomething(); //Works.
【问题讨论】:
有没有办法在 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();
}
【讨论】:
如果我正确解释了您的问题,那么正确的做法是创建一个单例类。
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();
}
【讨论】:
正如已经回答的那样,您可以使用 global variable 来存储类实例,但在我看来,您应该考虑使用类似 Singleton pattern 的东西来实现更简洁的实现。
您可以找到一个简单的单例类示例here。
【讨论】:
更简洁的方法是通过引用给定类来传递实例,然后访问它。
另一种方法是使用单例模式,尽管许多人认为它并不比全局模式更好。
【讨论】:
【讨论】: