gpt4 book ai didi

PHP - 静态局部变量

转载 作者:可可西里 更新时间:2023-11-01 13:10:16 25 4
gpt4 key购买 nike

所以我最近遇到了这样的代码段:

private static function FOO() {
static $c = null;
if ($c == null) {
$c = new ParentClass_InnerClass();
}
return $c;
}

那么这段代码是怎么回事?这与以下内容有何不同:

private static $C;

//other methods and fields

private static function FOO() {
if(!$self::c) {
$self::c = new ParentClass_InnerClass();
}
return $self::c;
}

或者它们甚至是同一个概念?

最佳答案

本质上,它们是相同的概念,尽管范围不同:

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 范围内访问。私有(private)属性的范围在整个类中。原来如此。
但实际上,帮自己一个忙:只在需要时才使用静态(它们也在实例之间共享)。在 PHP 中,您实际上很少需要静态。

关于PHP - 静态局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19569824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com