Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP5.2中的静态变量_Php - Fatal编程技术网

PHP5.2中的静态变量

PHP5.2中的静态变量,php,Php,我试图定义以下函数: function set($key, $value, $default = null) { if ($value) static $$key = $value; else static $$key = $default; } 但是当我调用它时,我得到了一个错误“Parse error:syntax error,意外的“$”,应该是T_变量”。我想定义静态变量可能有问题,但我找不到解决办法。你能?谢谢 如果我真

我试图定义以下函数:

function set($key, $value, $default = null)
    {
    if ($value)
        static $$key = $value;
    else
        static $$key = $default;
    }

但是当我调用它时,我得到了一个错误“Parse error:syntax error,意外的“$”,应该是T_变量”。我想定义静态变量可能有问题,但我找不到解决办法。你能?谢谢

如果我真的想这样做,我会使用静态数组:

function set($key, $value, $default = null)
{
    static $values = array();
    $values[$key] = is_null($value) ? $default : $value;
}
如果您还希望能够访问这些数据,更好的方法是将其封装在类中

class Registry
{
    private static $values = array();

    public static function set($key, $value, $default = null)
    {
        self::$values[$key] = is_null($value) ? $default : $value;
    }

    public static function get($key, $default = null)
    {
        return array_key_exists($key, self::$values) ? self::$values[$key] : $default;
    }
}
然后可以静态使用该类:

Registry::set('key', 'value', 'default');
$value = Registry::get('key', 'default');
更好的方法是根本不使用
static
关键字,而是创建一个具有普通属性的普通类,然后创建一个实例并使用该实例

class Registry
{
    private $values = array();

    public function set($key, $value, $default = null)
    {
        $this->values[$key] = is_null($value) ? $default : $value;
    }

    public function get($key, $default = null)
    {
        return array_key_exists($key, $this->values) ? $this->values[$key] : $default;
    }
}
然后,您可以创建该类的实例并将其传递:

$registry = new Registry();
do_something_that_requires_the_registry($registry);

如果在类中执行此操作,则可以使用
\uu get
\uu set
魔术函数

我在我的项目中这样使用它:

class foo
{

    public function __set($key, $value)
    {
        $this->vals[$key] = $value;
    }

    public function __get($key)
    {
        return $this->vals[$key];
    }
}

$foo = new foo();
$foo->bar = "test";
echo $foo->bar;

为什么要使用这样一个过时的php版本!!我想写PHP5.2!谢谢…@LFS,在
set()
函数的静态变量中设置这些变量后,您打算如何访问它们?该死。。我开始认为我完全误解了static关键字的工作原理。。现在我想删除我的问题,因为它可能没有任何意义。我认为通过使用static关键字,我可以从函数外部访问变量。。但我不能,对吗?@LFS,这个问题很有意义。我添加了一个示例,说明您试图实现的功能是如何工作的。@LFS,不,静态变量与任何其他变量具有相同的作用域。你在想什么。然而,明智的做法是避免使用全局变量。