jone21
@jone21
Кратко не получится

Как создать глобальную переменную работающую между одинаковыми классами?

<?php

$arraw=array("Start");
class AsyncOperation extends Thread {

    public function __construct($arg) {
        $this->arg = $arg;
    }

    public function run() {
	global $arraw;
        if ($this->arg) {
            $sleep = mt_rand(1, 10);
            printf('%s: %s  -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep);
            sleep($sleep);
			$arraw[]=$this->arg;
            printf('%s: %s  -finish' . "\n", date("g:i:sa"), $this->arg);
        }
    }
}

// Create a array
$stack = array();

//Initiate Multiple Thread
foreach ( range("A", "D") as $i ) {
    $stack[] = new AsyncOperation($i);
}

// Start The Threads
foreach ( $stack as $t ) {
    $t->start();
}

?>


Как сделать что то типо такого ? чтобы созданные классы могли обращаться и переписывать один и тот же массив
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
jone21
@jone21 Автор вопроса
Кратко не получится
Нашёл сам ответ с подкласом и валатильностью

https://www.sitepoint.com/parallel-programming-pth...
https://www.php.net/manual/ru/class.volatile.php
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
JaxAdam
@JaxAdam
Junior Full-Stack Developer
Вам следует почитать о наследованиях и свойствах.

Как решение предлагаю, создать родительский класс для таких классов и в нем хранить ваш $arraw в виде свойства.

Или же можно как-то "намудрить" с конструкторами, и передавать этот массив из класса в класс через __construct().
Передавать Создать $arraw в ClassOne(), потом передать ClassTwo(['arraw' => $classOneObject->arraw]) оттуда в класс 3,4,5 и так далее.
Ответ написан
Комментировать
@Upachko
Static переменная в классе является общей для всех объектов этого класса.
Пример
class A {
    public function foo() {
        static $x = 0;
        echo ++$x;
    }
}
$a1 = new A();
$a2 = new A();
$a1->foo();
$a2->foo();
$a1->foo();
$a2->foo();

Выведет: 1234
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы