使用php和singleton仅运行一次该过程

时间:2019-02-14 07:08:10

标签: php asynchronous singleton

我正在从工作表中读取数据,并希望在我的过程中实现单例,以便可以一次运行一次读取功能。

我已经为该类编写了代码,该类调用该类并设置一个静态变量,然后调用该函数以检查其是否具有该类,因此如果该类存在,则不要运行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();

}

我想一次运行一次读取功能,如果一个读取正在运行,则另一个读取将无法运行。

1 个答案:

答案 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;
    }
}