例如在此代码中:
class C{
function static getInstance(){
// here
}
}
$c = new c;
print_r(C::getInstance()); // should be $c
或至少使用
print_r($c::getInstance()); // should be $c
答案 0 :(得分:3)
嗯...... 没有,因为根据定义, 没有当前的类实例。可以从任何地方调用方法getInstance()
,甚至不需要存在类C
的实例。
答案 1 :(得分:2)
这是创建单身人士的错误方法,但你可以这样做:
class C {
private static $instance;
public static function getInstance(){
return self::$instance;
}
public function __construct() {
self::$instance = $this;
}
}
$c = new c;
print_r(C::getInstance()); // should be $c
我不确定你要做什么,但这是不的方法。
<强>更新强>
更好的方法是执行以下操作:
class C
{
private static $instance;
public static function getInstance()
{
if (!is_null(self::$instance)) return self::$instance;
self::$instance = new self;
return self::$instance;
}
private function __construct()
{
// Whatever
}
}
$c = new C; // This will not work since __construct() is private
$c1 = C::getInstance();
$c2 = C::getInstance();
echo ($c1 == $c2 ? 'yes' : 'no'); // yes
答案 2 :(得分:1)
在PHP 5.3中,你有一些像__invoke()
这样的神奇方法可以为你的单身人士做你想做的事。
在此处阅读更多内容:http://br2.php.net/manual/en/language.oop5.magic.php#object.invoke
<?php
class CallableClass
{
public function __invoke()
{
return this;
}
}
$obj = new CallableClass;
var_dump($obj);