有没有办法在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