有没有办法在PHP中的函数内访问一个类的实例?像这样:
include("class.php");
$bla=new Classname();
function aaa(){
$bla->DoSomething(); //Doesn't work.
}
$bla->DoSomething(); //Works.
答案 0 :(得分:6)
答案 1 :(得分:5)
如果我正确地解释了你的问题,那么正确的方法是创建一个单例类。
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();
}
答案 2 :(得分:2)
更简洁的方法是通过引用传递实例给定的类,然后访问它。
另一种方法是使用单身模式,尽管许多人认为它并不比全球模式更好。
答案 3 :(得分:1)
如果要在整个应用程序中仅强制使用类的单个实例,则应使用单例,而不是全局。你可以这样做:
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();
}
答案 4 :(得分:1)
正如已经回答的那样,您可以使用global variable来存储类实例,但听起来我应该考虑使用类似Singleton pattern的内容来代替更清晰的实现。
您可以找到单个类here的简单示例。