Запустите процесс только один раз, используя php и singleton - PullRequest
0 голосов
/ 14 февраля 2019

Я читаю данные с листа и хочу внедрить синглтон в моем процессе, чтобы я мог запускать функцию чтения, по одному за раз.

Я написал код для того же самого, который вызывает класс иустановите статическую переменную и затем вызовите функцию, чтобы проверить, есть ли у нее класс, поэтому, если класс существует, не запускайте функцию чтения.

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 голосов
/ 14 февраля 2019

Синглтон должен предотвращать публичное конструирование и клонирование.Это может быть просто достигнуто путем объявления этих методов как 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...