我们必须对内部缓存类进行一些修改以修复PHP7的问题。在这个过程中,我们发现了一些奇怪的代码。在下面的示例中(从实际代码中提取),您可以看到实例化新Cache实例的两行。示例中的活动行使缓存行为像单例一样,没问题。
它下面的注释掉的行是我们替换的,每次调用它都会返回一个不同的实例。当新类已作为参考否定引用时,它似乎具有&符号。我想了解原因。
我应该提到" =&" PHP7上的方法错误,这就是我们需要修复它的原因。只是对PHP5.6用它做什么感兴趣。
<?php
class Cache {
public $prefix;
public static function &getInstance($prefix = '') {
static $instance;
if (!$instance) {
$instance = new Cache($prefix);
// $instance =& new Cache($prefix);
}
return $instance;
}
public function __construct($prefix = '') {
$this->prefix = $prefix;
}
}
// Example Runs
// When using just "=", one instance, acts like a singleton
$cache = Cache::getInstance('1000');
$cache2 = Cache::getInstance('2000');
echo $cache->prefix . " | " . $cache2->prefix; // "1000|1000"
// When using "=&", multiple instances, no longer acts like a singleton
$cache = Cache::getInstance('1000');
$cache2 = Cache::getInstance('2000');
echo $cache->prefix . " | " . $cache2->prefix; // "1000|2000"