它们本质上是相同的概念,尽管范围不同:
class Foobar
{
private static $c = null;
public static function FOO()
{
if (self::$c === null)
{
self::$c = new stdClass;
}
return self::$c;
}
public static function checkC()
{
if (self::$c === null)
{
return false;
}
return self::$c;
}
}
Foobar::checkC();//returns false, as $c is null
//function checkC has access to $c
$returned = Foobar::FOO();//returns object
if ($returned === Foobar::checkC())
{//will be true, both reference the same variable
echo 'The same';
}
然而,如果我们将代码更改为:
class Foobar
{
public static function FOO()
{
static $c = null;
if ($c === null)
{
$c = new stdClass;
}
return $c;
}
public static function checkC()
{
if ($c === null)
{
return false;
}
return $c;
}
}
checkC
调用: undefined variable时我们会收到通知。静态变量 $c 只能从范围内访问FOO
。私有属性的范围是整个类。就是这样。
但实际上,帮自己一个忙:仅在需要时才使用静态(它们也在实例之间共享)。在 PHP 中,您实际上很少需要静态。