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,不,静态变量与任何其他变量具有相同的作用域。你在想什么。然而,明智的做法是避免使用全局变量。