Страницы

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

понедельник, 13 мая 2019 г.

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

Столкнулся с проблемой выполнения функции в функции и все это классе библиотеки (использую готовую библиотеку для работы потоков PHPThreads).Я передаю ей в качестве аргумента глобальный массив с данными.Необходимо чтобы функция выполнялась в функции класса корректно.
Сам код:
$mas = array( 'id1', 'id2', 'id3', 'id4', );
function Eacher($m){ foreach ($m as $value) { echo $value; }
}
$Thread->Create(function() { Eacher($mas); });
$Thread->Run(); ?>


Ответ

В вашем коде есть две проблемы:
Вы не инициализировали сессию. Похоже, что этот момент является критическим для работы используемой вами библиотеки. Как уже сказал @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();

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

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