У меня есть класс PHP со статической переменной, которая инициализируется в 0.
В моем файле index.php я использую Async в Spatie для вызова функций из других классов (несколько классов), которые увеличивают ранее упомянутую статическую переменную (я также пытался использовать одноэлементный шаблон и PHP-переменную $ GLOBALS) ). Когда это будет сделано, я вызываю функцию Spatie pool-> wait (), а затем печатаю / записываю статическую переменную. Это всегда дает мне 0. Если я записываю переменную сразу после ее увеличения, то это дает мне 1, как будто переменная инициализируется снова для каждого вызова функции.
Код слишком сложен, чтобы отображать его здесь, поэтому я надеюсь, что я объяснил это достаточно подробно.
Есть ли способ получить переменную с правильной глобальной областью действия?
РЕДАКТИРОВАТЬ: По запросу я добавляю некоторые фрагменты кода, но некоторые классы и переменные для простоты заменены на общие.
Это класс PHP, в котором инициализируется переменная, здесь нет ничего интересного, переменная здесь не используется:
class ClassOne
{
static $var = 0;
...
}
Это класс, в котором вызываются функции, в index.php он, конечно, создается, и вызывается его функция 'func':
class ClassTwo
{
protected $pool;
public function __construct()
{
// The Pool object is from the PHP Spatie Async library.
$this->pool = Pool::create();
}
public function func (array $data) {
foreach ($data as $datum) {
for($iteration = 0; $iteration < $datum['iterations']; $iteration++) {
$this->pool->add(function () use ($datum) {
$instance = new ClassThree();
$instance->call($datum['data']);
})->then(function ($output) {
...
})->catch(function (Exception $exception) {
...
});
}
}
$this->pool->wait();
print 'Variable: ' . ClassOne::$var;
}
...
}
Наконец, это функции, в которых переменная увеличивается, переменная здесь не затрагивается:
class ClassThree
{
public function call($data) {
try {
...
ClassOne::$var++;
} catch {
...
}
}
}
Как я упоминал ранее, если бы я поместил 'print' из ClassTwo сразу после увеличения ClassThree, я бы получил 1 несколько раз, но таким образом я получу 0.