Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Не передается глобальная переменная в функцию класса с функцией

#php #многопоточность


Столкнулся с проблемой выполнения функции в функции и все это классе библиотеки (использую
готовую библиотеку для работы потоков PHPThreads).Я передаю ей в качестве аргумента
глобальный массив с данными.Необходимо чтобы функция выполнялась в функции класса корректно. 

Сам код:

Create(function()  {
        Eacher($mas);
    });

    $Thread->Run();
?>

    


Ответы

Ответ 1



В вашем коде есть две проблемы: Вы не инициализировали сессию. Похоже, что этот момент является критическим для работы используемой вами библиотеки. Как уже сказал @Visman, вы неправильно передаете массив в новый тред. Вообще, в PHP для передачи значения в анонимные функции, нужно использовать замыкания. Однако, в вашем случае этот подход не годится, ведь выполнение задачи будет проходить в другом процессе. По этой же причине, вариант с глобальными переменными тоже вряд ли сработает. К счастью, используемая вами библиотека предоставляет специальные средства для передачи аргументов функции. Пример есть в readme. Таким образом, ваш код должен иметь вид: session_start(); include 'lib/Threads.php'; $mas = array( 'id1', 'id2', 'id3', 'id4', ); function Eacher($m){ foreach ($m as $value) { echo $value; } } $Thread->Create(function($vars) { extract($vars); Eacher($mas); }, array( 'mas' => $mas, )); $Thread->Run();

Ответ 2



Попробуйте так require_once 'lib/Threads.php'; $i=0; while ($i < 10) { $res = "lol$i"; $mas[] = $res; $i++; } $arr = array_chunk($mas, 2); function Id($m) { foreach ($m as $value){ echo $value; } } $Thread->Create(function($vars) { extract($vars); Id($arr); }, array( 'arr' => $arr, )); $Thread->Run();

Ответ 3



Ещё можно так счастья попытать: $Thread->Create(function(){ global($arr); Id($arr); // возможно вот тут он ищет локальный массив $arr });

Комментариев нет:

Отправить комментарий