我正在从工作表中读取数据,并希望在我的过程中实现单例,以便可以一次运行一次读取功能。
我已经为该类编写了代码,该类调用该类并设置一个静态变量,然后调用该函数以检查其是否具有该类,因此如果该类存在,则不要运行read函数。
class DataParser extends config {
private static $_instance = false;
public static
function getInstance() {
if (self::$_instance == false) {
print_r("expression");
self::$_instance = true;
return self::$_instance;
}
return false;
}
function __construct($params) {}
}
$dataParser = new DataParser($confData);
$p = DataParser::getInstance();
if ($p) {
$res = $dataParser - > read();
}
我想一次运行一次读取功能,如果一个读取正在运行,则另一个读取将无法运行。
答案 0 :(得分:0)
单身人士需要阻止公共构建和克隆。只需将这些方法声明为protected
即可实现。
要检查当前是否正在执行read()
,可以使用标志$isRunning
。
<?php
class DataParser
{
protected static $instance;
protected static $isRunning = false;
protected function __construct()
{
}
protected function __clone()
{
}
public static function getInstance(): DataParser
{
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function read(): void
{
if (static::$isRunning) {
throw new RuntimeException('DataParse is already running');
}
static::$isRunning = true;
// Do some reading
static::$isRunning = false;
}
}