範囲は異なりますが、基本的には同じ概念です。
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
ます: 未定義変数。静的変数 $c は、FOO
スコープ内からのみアクセスできます。プライベート プロパティは、クラス全体に適用されます。それは本当にそれです。
しかし、実際には、自分自身に好意を持ってください: 必要な場合にのみ statics を使用してください (インスタンス間でも共有されます)。PHP では、実際に static が必要になることはほとんどありません。