我可以这样做吗?
class A {
public function foo() { echo "whatever";}
}
class B {
static public $var;
static function initVar($var) { self::$var = $var; }
static public function bar() { return self::$var->foo(); }
}
class C {
public function baz() {
$a = new A();
B::initVar($a);
echo B::bar(); // should print "whatever"
}
}
如果没有,是否有任何方法可以通过静态方法访问给定的对象实例?
答案 0 :(得分:1)
是的,你可以。这通常是如何实现Singleton(一个对象应该只被实例化一次的模式)。虽然这种模式被认为是糟糕的......
http://en.wikipedia.org/wiki/Singleton_pattern
示例(虽然在同一个班级......):
class A
{
private static $inst;
public static function instance()
{
if (self::$inst === NULL)
{
self::$inst = new A();
}
return self::$inst;
}
/* constructor etc */
}
$a = A::instance();
$a->someMethod();
?>